Autor Zpráva
Mastodont
Profil
Dejme tomu, že máme obsah, u kterého se některé atributy mohou opakovat. Například kontakty - u každého kontaktu lze evidovat více adres, více telefoních čísel, více e-mailů. Už v první normální formě je vyloučeno, aby se takové sloupce dávaly do hlavní tabulky. Pokud je však dám do zvláštní tabulky, bude velké množství údajů prázdných - například když budě většina kontaktů mít více e-mailů, ale jen jednu adresu. Dalo by se to řešit tak, že bych pro každý opakovaný atribut vytvořil zvláštní tabulku:
- kontakty_hlavni
- kontakty_email
- kontakty_telefon
Ale to také není ideální, protože se zvyšuje počet joinů pro výběr dat.

Uvažuji, že bych to řešil zdvojeným ukládáním dat: ve hlavní tabulce by měl každý opakovaný atribut jeden sloupec, ve kterém by hodnoty byly zapsány dohromady (s oddělovačem), kromě toho by existovaly pomocné tabulky pro vyhledávání, kde by byly hodnoty zvlášť. Znamená to sice víc místa na disku, ale určitě by se zjednodušilo načítání (žádný join).

Je to OK nebo se to dělá jinak?
nightfish
Profil
předčasná optimalizace?
joe
Profil
Já bych měl jen jednu tabulku navic, treba dejme tomu ty kontakty

uzivatel_id | typ | hodnota

uzivatelovo id - jasné
typ - enum - telefon | email | icq | ...
hodnota - taky jasné

A bude to jen s jedním joinem. Nevím jestli to je zrovna dobré řešení, ale udělal bych to asi tak.

EDIT: a nebo s tím oddělovačem a tabulkou navíc pro hledání.
Mastodont
Profil
nightfish
Jo, jako PO to asi vypadá, ale ona k tomu ještě přibude možnost ukládání starších verzí položek, takže se více tabulkám stejně nevyhnu.
ninja
Profil
Mastodont: uzivatel_id | typ | hodnota | timestamp

Nejnovejsi hodnota je aktualni. Respektive pokud ma byt mozne mit vice emailu pro jednoho uzivatele, tak

uzivatel_id | typ | hodnota | timestamp | aktual
AM_
Profil
joeovo řešení bych označil za optimální. A možnost s oddělovačem a tabulkou navíc bych bral v úvaho až jako poslední, cokoliv, co vede k duplicitě dat, vede také k potenciálním chybám.
Mastodont
Profil
Díky za názory. Ještě jsem si trochu početl a udělám to tak, že na pozadí budou normalizované tabulky, ze kterých bude vytvářen materializovaný pohled pro zobrazení dat.
Toto téma je uzamčeno. Odpověď nelze zaslat.