Portál AbcLinuxu, 10. května 2025 12:18

Dotaz: "Necizí klíče jako cizí"

20.11.2010 12:22 fok
"Necizí klíče jako cizí"
Přečteno: 199×
Odpovědět | Admin
Zdravím. Řeším zajímavý problém s mysql a 2 - N tabulkami:
tabulka1
------------------------------
ucet | zmenen
------------
a      0000-00-00 00:00:00
b      0000-00-00 00:00:00
c      0000-00-00 00:00:00


tabulka2
------------------------------
ucet | sl2 | sl3 | ...
a     ........
b     ........
c     ........
d     ........
Teď přichází ta sranda. Normálně by měl být sloupec ucet v tabulce2 foreign key na primarni klic ucet v tabulce1, jenze chci dovolit aby v tabulce2 mohly byt ucty, ktere nejsou v tabulce1, ale zaroven pokud tam takovy bude, aby to opravdu fungovalo jako PK a FK (změním ucet v tabulce1 a změní se všude, odstraním ho a taky se odstraní v tabulce2). Asi bych to dokázal vyřešil triggery, ale není jednodušší způsob něco jako výjimka pro cizí klíč?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

20.11.2010 13:32 Pavel
Rozbalit Rozbalit vše Re: "Necizí klíče jako cizí"
Odpovědět | | Sbalit | Link | Blokovat | Admin
No tak tam nedavej cizi klic, to je preci jasne. Pokud tam chces mit i jine hodnoty, tak to nemuze byt cizi klic. Cizi klic je pevne vazan na hodnoty jine tabulky a to je jeho podstata.

Delani JOINu mezi tabulkami neni podmineno cizim klicem. Muzes spojovat libovolne sloupce bez nutnosti ciziho klice.
20.11.2010 13:40 Pavel
Rozbalit Rozbalit vše Re: "Necizí klíče jako cizí"
Odpovědět | | Sbalit | Link | Blokovat | Admin
A mimochodem, rozhodne neplati, ze zmenou hodnoty v prvni tabulce zmena probuble do vsech cizich klicu. To musis provest pro kazdej cizi klic zvlast a jeste k tomu toto vsechno v jedne transakci.

Zrovna cistim databazi, kterou navrhl nejakej expert, ktera je plna takovych cizich-necizich klicu, podobne jak jsi to tu naznacil. To pak mas v tabulce napr. objednavky, ktere patri neexistujicim zakaznikum a podobne perly.
Tarmaq avatar 21.11.2010 16:34 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: "Necizí klíče jako cizí"
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nevim ale tohle bych resil asi uplne jinym navrzenim tabulky. Tzn. udelal bych jednu tabulku ucty kde by byly vsechny ucty a pak ty PK v tabulkach tabulka1 a tabulka2 byly zaroven cizi klice do teto, mazani by resila kaskada..
ucty
----
ucet
----
a
b
c
d

tabulka1
--------
ucet | zmenen
-------------
a      0000-00-00 00:00:00
b      0000-00-00 00:00:00
c      0000-00-00 00:00:00

tabulka2
--------
ucet | sl1 | sl2 | ...
----------------------
a      foo   ...
b      bar   ...
c      omg   ...
d      wtf   ...
Don't panic!
21.11.2010 22:25 kuka
Rozbalit Rozbalit vše Re: "Necizí klíče jako cizí"
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mozna by stalo za to popsat vecne o co jde, protoze to vypada na nepovedeny navrh (napr. kde jsou evidovany ty ucty, pro ktere v tabulka1 neni zaznam?). Pokud opravdu potrebujes to co popisujes, tak urcite nejde o vztah, kde by se dalo uvazovat o cizim klici, a trigger bude pro zachyceni takove logiky nejvhodnejsi.
21.11.2010 23:22 jekub
Rozbalit Rozbalit vše Re: "Necizí klíče jako cizí"
to vypada na nepovedeny navrh

presne jak pise kuka. pokud nenapisete o co se vlastne pokousite, tezko radit. byt me dve az tri "hnusna" reseni napadaji.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.