sql >> Databáze >  >> RDS >> Mysql

Návrh tabulky entity-atributu-hodnoty

Nabízím opačný názor k většině komentářů k této otázce. Zatímco EAV je ZLO ze všech důvodů, které můžete najít důkladně vysvětlené mnohokrát zde na SO a DBA.SE a jinde, existuje jedna opravdu běžná aplikace, pro kterou je většina věcí, které jsou s EAV špatně, do značné míry irelevantní a (několik) výhod EAV jsou velmi relevantní. Tou aplikací jsou online katalogy produktů.

Hlavním problémem EAV je, že neumožňuje databázi dělat to, v čem je opravdu dobrá, což pomáhá dát správný kontext různým atributům informací o různých entitách jejich uspořádáním do schéma . Mít schéma přináší mnoho a mnoho výhod týkajících se přístupu, interpretace a vynucování integrity vašich dat.

Faktem o produktových katalozích je, že atributy produktu jsou téměř zcela irelevantní pro katalogový systém sám. Systémy produktového katalogu dělají (nejvýše) tři věci s atributy produktu.

  1. Zobrazte koncovým uživatelům atributy produktu v seznamu ve tvaru:{název atributu}:{hodnota atributu}.

  2. Zobrazení atributů více produktů ve srovnávací mřížce, kde jsou atributy různých produktů seřazeny proti sobě (produkty jsou obvykle sloupce, atributy jsou obvykle řádky)

  3. Stanovte pravidla pro něco (např. ceny) na základě konkrétních kombinací atributů a hodnot.

Pokud vše, co váš systém dělá, je regurgitovat informace, které jsou sémanticky irelevantní (pro systém), pak je schéma pro tyto informace v podstatě neužitečné. Ve skutečnosti schéma překáží v online katalogu produktů, zvláště pokud váš katalog obsahuje mnoho různých typů produktů, protože se vždy musíte vrátit do schématu a pohrát si s ním, abyste umožnili nové kategorie produktů nebo typy atributů.

Vzhledem k tomu, jak se používá, ani datový typ hodnoty atributu v katalogu produktů není nezbytně (životně) důležitý. U některých atributů možná budete chtít zavést omezení, například „musí být číslo“ nebo „musí pocházet z tohoto seznamu {...}“. To závisí na tom, jak důležitá je konzistence atributů pro váš katalog a jak propracovanou chcete, aby byla vaše implementace. Při pohledu na produktové katalogy několika online prodejců bych řekl, že většina je připravena vyměnit jednoduchost za konzistenci.

Ano, EAV je zlo, kromě případů, kdy tomu tak není.



  1. Výukový program MySQL:Klauzule MySQL IN (základní)

  2. Jaká je správná syntaxe adresy URL JDBC, pokud se používají peněženky Oracle?

  3. Jak uložím a načtu obrázek na svém serveru v java webové aplikaci

  4. Oracle zkopíruje data do jiné tabulky