sql >> Database >  >> RDS >> Mysql

Database-ontwerp:EAV-opties?

Hoewel minimalistisch zoals weergegeven, introduceert de attributentabel van Model2 het concept van meta-data in de mix, met al het goede dat eruit voortkomt. Model2 heeft nog andere voordelen, bijvoorbeeld de prestatieverbeteringen geassocieerd met een kleinere rijgrootte (van de tabel Waarde), maar ik wil me concentreren op het concept van metagegevens.

Zelfs zoals het is De attributentabel van Model2 vormt een opslagplaats van alle geldige attributen (met model1 zou men een soort geaggregeerde query moeten uitvoeren om zo'n lijst te krijgen). Ook, en zoals het is , is de repository voldoende om buitenlandse sleutelbeperkingen te introduceren om de integriteit van de dataset te helpen behouden (met Model 1 zou men externe vormen van validatie nodig hebben van de waarden die zijn opgeslagen in de attribuutkolom.

Met een paar eenvoudige toevoegingen kan de attributentabel een veelzijdige opslagplaats worden die voor verschillende doeleinden kan worden gebruikt. De tabel kan bijvoorbeeld enkele van de volgende bevatten

  • info zoals de weergavevriendelijke naam van elk attribuut
  • enkele vlaggen die het type veld aangeven (numeriek vs. string vs. datum enz.), voor gedifferentieerde behandeling/verwerking
  • de specifieke Value-tabel waarin het onderliggende attribuut is opgeslagen (Model toont slechts één tabel, maar optimalisatie/schaling vraagt ​​soms om het splitsen van de tabellen)
  • het feit dat het attribuut kan worden opgeslagen als een eigen kolom in de tabel "Waarde" (wederom een ​​vorm van optimalisatie, waarbij in wezen het beste van twee werelden wordt verkregen:de flexibiliteit van het schema van het EAV-model maar de prestaties van traditionele relationeel model voor de attributen die het meest worden gebruikt en/of het meest voorkomen bij alle entiteiten.
  • de mogelijkheid om attributen te hernoemen, zonder de hoofdtabel te storen. Alleen wijzigingen op metadataniveau.
  • verschillende toepassingsgerichte semantiek. Bijvoorbeeld indicatoren dat een bepaald kenmerk moet worden aangeboden als een van de basis- versus geavanceerde zoekvelden.

In een notendop, de attributentabel wordt een hulpmiddel waarmee de toepassing echt gegevensgestuurd kan zijn (of preciezer:meta datagedreven). U kunt inderdaad ook van een entiteitstabel houden, d.w.z. een waarin de metagegevens met betrekking tot de verschillende entiteitstypen worden verzameld:wat zijn de verschillende entiteitstypen, welke attributen zijn toegestaan ​​voor welk entiteitstype enz.

Nu... let op de opmerking van zerkms , onder de vraag zelf. Ondanks al zijn voordelen, heeft het EAV-model ook zijn nadelen en uitdagingen, zoals de complexiteit van de vragen die in je opkomen, en ook prestatieproblemen. Deze zorgen mogen echter niet a priori EAV diskwalificeren:er zijn veel gevallen waarin EAV een betere benadering is.
Ervan uitgaande dat EAV de keuze is dan Model2, of zelfs iets iets geavanceerder is absoluut superieur aan model1.



  1. Het gebruik van een kolomalias in de WHERE-clausule van de MySQL-query levert een fout op

  2. Verminder database-oproepen om de websiteprestaties te verbeteren

  3. DATEFROMPARTS() Voorbeelden in SQL Server (T-SQL)

  4. hive.HiveImport:FAILED:SemanticException [Fout 10072]:Database bestaat niet: