Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Jiří Kučera 04. 04. 2010, 13:48:55
-
Mám v relační databázi několik různých tabulek se zápisy různých typů (např. A, B, C... v jedné, a, b, c... v druhé, 1, 2, 3... v třetí tabulce). Potřeboval bych udělat seznam (tedy tabulku v DB), který by obsahoval položky z těchto různých tabulek (např. A, B, a, c, 2, 3...).
Jak tabulku pro takový seznam navrhnout?
Napadají mě prozatím dvě možnosti:
1) Tabulka by obsahovala sloupeček s cizím klíčem a sloupeček, který by určoval, do které tabulky cizí klíč odkazuje.
2) Tabulka by obsahovala tolik sloupečků s cizími klíči, z kolika tabulek chci, aby byly použity záznamy, tedy pro každou z tabulek svůj vlastní klíč.
V prvním případě není tabulka ani v druhé normální formě, takže by se asi špatně zajišťovala referenční integrita – nešly by definovat cizí klíče a jejich omezení na úrovni DB.
V druhém případě by tabulka byla zase poměrně špatně rozšiřitelná, navíc by byla řídká, ale nebyl by problém udržet referenční integritu.
K jakému řešení byste se přiklonili, případně napadá vás nějaké jiné?
-
Napadá mě ještě pro každou z tabulek udělat pivot tabulku, která se používá pro rozklad vazeb M:N, v té by byl cizí klíč na záznam z tabulky onoho seznamu, a cizí klíč z příslušné tabulky.
Jen nevím, jestli se pak zase DB nerozpadne na příliš mnoho tabulek.
-
Možná jsem dotaz jen špatně pochopil, ale neřeší to UNION?
-
Pokud používáš nějakou slušnou databázi, co má sekvence, tak můžeš generovat pro všechny tabulky primární klíč z jedný sekvence.
Pokud chceš referenční integritu, tak Ti nezbyde než pro všechny záznamy vytvořit ještě jednu tabulku, trigerama (či v postgresql pomocí rules) ji plnit dle záznamů v těch tabulkách a udělat referenční iuntegritu oproti ní.
Pokud Ti jde opravdu jen o souhrn záznamů z víc tabulek, tak by možná dostačoval view definovanej jako union.
-
Nestacil by pohled (view) se sjednocenim (union)?
create view XY as
select key1 as key from table1 union
select key2 as key from table2;