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

Jak ukládat data s dynamickým počtem atributů v databázi

Pokud někdy plánujete hledat konkrétní atributy, je špatný nápad je serializovat do jednoho sloupce, protože k získání informací budete muset použít funkce pro jednotlivé řádky – to se málokdy dobře škáluje.

Rozhodl bych se pro vaši druhou volbu. Mít seznam atributů v tabulce atributů, objekty v jejich vlastní tabulce a tabulku vztahů mnoho k mnoha nazývanou atributy objektů.

Například:

objects:
    object_id    integer
    object_name  varchar(20)
    primary key  (object_id)
attributes:
    attr_id      integer
    attr_name    varchar(20)
    primary key  (attr_id)
object_attributes:
    object_id    integer  references (objects.object_id)
    attr_id      integer  references (attributes.attr_id)
    oa_value     varchar(20)
    primary key (object_id,attr_id)

Vaše obavy o výkon jsou zaznamenány, ale podle mých zkušeností je vždy nákladnější rozdělit sloupec než kombinovat více sloupců. Pokud se ukáže, že existují problémy s výkonem, je naprosto přijatelné rozbít 3NF z výkonnostních důvodů.

V takovém případě bych to uložil stejným způsobem, ale měl bych také sloupec s nezpracovanými serializovanými daty. Pokud použijete triggery pro vložení/aktualizaci k synchronizaci sloupcových a kombinovaných dat, nebudete mít žádné problémy. Ale neměli byste si s tím dělat starosti, dokud se nevynoří skutečný problém.

Použitím těchto spouštěčů minimalizujete práci potřebnou pouze když se údaje změní. Tím, že se snažíte extrahovat informace z podsloupců, děláte zbytečnou práci na každém vyberte.



  1. Mysql Create Database se speciálními znaky v názvu

  2. Nainstalujte PL/Java 1.5.2 v PostgreSQL 11

  3. Převést „smalldatetime“ na „datetime“ v SQL Server (příklady T-SQL)

  4. Jak změním heslo uživatele root v MySQL?