sql >> Databasteknik >  >> RDS >> Mysql

mysql-tabellstrukturförslag?

Nej, detta är en dålig design för en relationsdatabas. Det här är ett exempel på Entity-Attribute-Value design. Det är flexibelt, men det bryter mot de flesta regler för vad det innebär att vara en relationsdatabas.

Innan du går ner i EAV-designen som en lösning för en flexibel databas, läs den här historien:Bad CarMa .

Mer specifikt inkluderar några av problemen med EAV:

  • Du vet inte vilka attribut som finns för ett givet ID_NUM utan att fråga efter dem.
  • Du kan inte göra något attribut obligatoriskt, motsvarande NOT NULL.
  • Du kan inte använda databasbegränsningar.
  • Du kan inte använda SQL-datatyper; value kolumnen måste vara en lång VARCHAR.
  • Särskilt i MySQL lagras varje VARCHAR på sin egen datasida, så detta är väldigt slösaktigt.

Frågor är också otroligt komplexa när du använder EAV-designen. Magento, en e-handelsplattform med öppen källkod, använder EAV i stor utsträckning, och många användare säger att det är väldigt långsamt och svårt att fråga om du behöver anpassade rapporter.

För att vara relationell bör du lagra varje olika attribut i en egen kolumn, med ett eget namn och en lämplig datatyp.

Jag har skrivit mer om EAV i min presentation Praktisk objektorienterad Modeller i SQL och i mitt blogginlägg EAV FAIL , och i min bok, SQL Antipatterns:Avoiding the Pitfalls of Database Programming .



  1. Installera MariaDB på en Mac

  2. PHP-kod för att infoga kryssrutavärde i specifik kolumn på mysql med välj formulär

  3. Skapar tom rad för upprepad rad

  4. hur man använder sql join i mysql