Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Jiří Kučera 04. 04. 2010, 13:48:55

Název: Cizí klíč v relační DB z více různých tabulek
Přispěvatel: 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é?
Název: Re: Cizí klíč v relační DB z více různých tabulek
Přispěvatel: Jiří Kučera 04. 04. 2010, 14:15:05
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.
Název: Re: Cizí klíč v relační DB z více různých tabulek
Přispěvatel: Kit 06. 04. 2010, 18:56:42
Možná jsem dotaz jen špatně pochopil, ale neřeší to UNION?
Název: Re: Cizí klíč v relační DB z více různých tabulek
Přispěvatel: Logik 06. 04. 2010, 20:43:51
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.
Název: Re: Cizí klíč v relační DB z více různých tabulek
Přispěvatel: j. 06. 04. 2010, 22:57:41
Nestacil by pohled (view) se sjednocenim (union)?

create view XY as
select key1 as key from table1 union
select key2 as key from table2;