Jak na schéma databáze CMS v MySQL rubrika: Databáze: SQL

1 sitnarf
položil/-a 14.7.2013
 
upravil/-a 14.7.2013

Zdravím,
vytvářím vlastní CMS, ve kterém je možné v rámci administrace definovat vlastní pole ke stránkám (např. titulek, obsah, autor atd.), ale nevím, jak to nejlépe namodelovat databázi. Je pro mě důležité, aby zůstala možnost agregace, budu chtít abych mohl získat např. stránky od určitého autora, razene podle nazvu atd. Používám MySQL.

Zatím vím o těchto možnostech:
a) serializovaná data (např. JSON) ve sloupci data - nevhodné, protože nebudu moct při fetchování podle vlastních polí různě filtrovat, řadit (nebo ano?)
b) určitý počet předpřipravených "custom columns" v tabulce - asi nejjednodušší, ale dost ubohé, navíc omezený počet vlastních polí
c) EAV (entity - attribute - value model) - ten používám teď, ale dotazy jsou dost komplikované a časově náročné, podle některých anti-pattern, já ale nic jiného použitelného nenašel.

Děkuji za jakékoliv nápady. Např. ví někdo jak to dělají různé CMS (Drupal a jiné) ?

odkaz
9 joinmax
odpověděl/-a 20.7.2013

b) je jednoznačné zlo

a) by připadalo v úvahu, pokud bys na základě těch dat nechtěl dělat projekci ani restrikci a stačilo by ti je prostě jen načítat a ukládat (nebo pokud by DB podporovala efektivní práci s těmi daty - to některé DB umí v případě XML - můžeš filtrovat pomocí XPath dotazů a je to i indexované, není to jen blob/text)

c) je absolutně univerzální a pružné, ale daní za to je ta nižší efektivita a/nebo složitější dotazy

d) datový model se může upravovat za chodu (typicky budou přibývat a ubývat sloupečky), to je nejlepší řešení, ale vyžaduje to určité počáteční úsilí (musí se to udělat pořádně, aby se ti to nevymklo z rukou - pak ale bude taková aplikace/databáze dobře sloužit)

Komentáře

  • sitnarf : a) Prosím tě, v MySQL to xml ale indexované není ne? Protože google mi absolutně nic nevrací. 21.7.2013
  • Stefano : EAV ja sql antipatern. Eshop Magento používa pravé tento vzor. Výsledkom je pomaly web. Riešenie data sa ukladajú pomocou eav a následné sa vytvára flat verzia(čo stĺpec to atribut) tých istých dat. 21.7.2013
  • Pavel Hodek : Možná si každý musí projít tím, že se do EAV nejprve zamiluje a pak ho proklíná. Určitě je lepší, dát na radu těch co to zkusili (a nejen o tom slyšeli) a raději se takovému řešení vyhnout. 25.7.2013
  • Tomáš Tintěra : Pěkný článek na to to téma http://martinfowler.com/bliki/UserDefinedField.html 26.7.2013
  • Stefano : Pekná kniha o návrhu databázy je toto http://pragprog.com/book/bksqla/sql-antipatterns Kniha poukazuje na najčastejšie chyba a popisuje ako sa týmto chybám vyhnúť. Je tam aj kapitola o EAV 26.7.2013
  • Tomáš Tintěra : Díky @Stefano za odkaz na tu knihu. Vzhledem k tomu, že jsem zdědil aplikaci s EAV a hledáme kudu a proč dále, podrobné a již hotové vysvětlení se hodí. 29.7.2013

Pro zobrazení všech 17 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.