Cizí klíč v relační DB z více různých tabulek

Cizí klíč v relační DB z více různých tabulek
« kdy: 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é?


Re: Cizí klíč v relační DB z více různých tabulek
« Odpověď #1 kdy: 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.

Kit

Re: Cizí klíč v relační DB z více různých tabulek
« Odpověď #2 kdy: 06. 04. 2010, 18:56:42 »
Možná jsem dotaz jen špatně pochopil, ale neřeší to UNION?

Logik

  • *****
  • 1 032
    • Zobrazit profil
    • E-mail
Re: Cizí klíč v relační DB z více různých tabulek
« Odpověď #3 kdy: 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.

j.

Re: Cizí klíč v relační DB z více různých tabulek
« Odpověď #4 kdy: 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;