sql >> Databasteknik >  >> RDS >> Mysql

Entity-Attribute-Value Tabelldesign

Jag kommer att ge en motsatt åsikt till de flesta kommentarerna i denna fråga. Medan EAV är OND av alla de skäl som du kan hitta grundligt förklarade många gånger här på SO och DBA.SE och på andra ställen, finns det en riktigt vanlig applikation för vilken det mesta som är fel med EAV i stort sett är irrelevant och de (få) fördelarna med EAV är mycket tyska. Den applikationen är onlineproduktkataloger.

Det största problemet med EAV är att den inte låter databasen göra vad den är riktigt bra på att göra, vilket hjälper till att ge korrekt sammanhang till olika attribut för information om olika enheter genom att ordna dem i ett schema . Att ha ett schema ger många, många fördelar när det gäller att komma åt, tolka och upprätthålla integriteten hos dina data.

Faktum med produktkataloger är att attributen för en produkt är nästan helt irrelevanta för katalogsystemet sig. Produktkatalogsystem gör (högst) tre saker med produktattribut.

  1. Visa produktattributen i en lista för slutanvändare i formen:{attributnamn}:{attributvärde}.

  2. Visa attributen för flera produkter i ett jämförelsenät där attribut för olika produkter står i linje med varandra (produkter är vanligtvis kolumner, attribut är vanligtvis rader)

  3. Drive regler för något (t.ex. prissättning) baserat på speciella kombinationer av attribut/värde.

Om allt ditt system gör är att återfå information som är semantiskt irrelevant (för systemet) så är schemat för denna information i princip ohjälpsamt. Faktum är att schemat kommer i vägen i en onlineproduktkatalog, särskilt om din katalog har många olika typer av produkter, eftersom du alltid måste gå tillbaka till schemat för att mixtra med det för att tillåta nya produktkategorier eller attributtyper.

På grund av hur det används är inte ens datatypen för ett attributvärde i en produktkatalog nödvändigtvis (av avgörande betydelse). För vissa attribut kanske du vill införa begränsningar, som "måste vara ett nummer" eller "måste komma från den här listan {...}". Det beror på hur viktig attributkonsistens är för din katalog och hur utarbetad du vill att din implementering ska vara. Om jag tittar på produktkatalogerna från flera onlineåterförsäljare skulle jag säga att de flesta är beredda att byta ut enkelhet för konsekvens.

Ja, EAV är ond, förutom när den inte är det.



  1. ORA-06502:PL/SQL:numeriskt eller värdefel:teckensträngsbuffert för liten

  2. Kan vi uppdatera primärnyckelvärden för en tabell?

  3. Filtrera data med JDBC RowSet

  4. Rapportera mer detaljerat än vanligt – Microsoft Access