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

návrh struktury tabulky mysql?

Ne, toto je špatný návrh relační databáze. Toto je příklad Entity-Attribute-Value design. Je flexibilní, ale porušuje většinu pravidel toho, co to znamená být relační databází.

Než se pustíte do návrhu EAV jako řešení pro flexibilní databázi, přečtěte si tento příběh:Špatná CaRMa .

Konkrétněji, některé z problémů s EAV zahrnují:

  • Nevíte, jaké atributy existují pro dané ID_NUM, aniž byste se na ně zeptali.
  • Žádný atribut nelze nastavit jako povinný, což je ekvivalent NOT NULL.
  • Nemůžete používat databázová omezení.
  • Nemůžete používat datové typy SQL; value sloupec musí být dlouhý VARCHAR.
  • Zejména v MySQL je každý VARCHAR uložen na své vlastní datové stránce, takže je to velmi plýtvání.

Dotazy jsou také neuvěřitelně složité, když používáte návrh EAV. Magento, platforma elektronického obchodování s otevřeným zdrojovým kódem, široce využívá EAV a mnoho uživatelů říká, že pokud potřebujete vlastní přehledy, dotazování je velmi pomalé a obtížné.

Chcete-li být relační, měli byste každý jiný atribut uložit do vlastního sloupce s vlastním názvem a vhodným datovým typem.

Více o EAV jsem napsal ve své prezentaci Praktické objektově orientované Modely v SQL a v mém příspěvku na blogu EAV FAIL a v mé knize SQL Antipatterns:Vyhýbání se nástrahám databázového programování .



  1. Rozdíl mezi sys.parameters, sys.system_parameters a sys.all_parameters v SQL Server

  2. sledování změn v mysql

  3. Blockchain:Co to je, jak to funguje a co to znamená pro velká data

  4. Jak přidat název do záhlaví formuláře v aplikaci Access