» »

[SQL] Kako omejiti vrednost med parent in child tabelo?

[SQL] Kako omejiti vrednost med parent in child tabelo?

MrStein ::

Če imamo en foreign key column in en atribut x, kako lahko omejim, da FK vedno kaže na vrstico, ki ima enako vrednost atributa x?

Recimo, če ima žival MOTHER_ID in FATHER_ID kot FK, kako dodatno omejiti, da je CHILD.SPECIES enak PARENT.SPECIES?

Tabela je:
ANIMAL
---------
ID - PK
MOTHER_ID - FK
FATHER_ID - FK
SPECIES - ID vrste (1-lev, 2-tiger, 3-slon, 4-žirafa,...)
AGE
MASS itd...

Torej da ima slon lahko za starše samo druge slone, ne pa tudi leve?

Gre se za Oracle, lahko pa tudi splošno.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
  • spremenil: MrStein ()

Tody ::

Rabiš vmesno tabelo ali view ena proti mnogo rabi vedno to. V tabeli poveš katere vrste so starši. Tako boš dobil spisek vseh slonov, kdo je od koga otrok pa potem z queryiem.

MrStein ::

Lahko malo bolj podrobno?

PS: Ena možnost pa so seveda trigger-ji.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Tody ::

Jah foren key so uporabni samo ko se vežejo na tuje tabele :) Oz vezne tabele... Torej moreš imeti tabelo starši, kjer boš povedal povezavo med mamo slonico in sinčkom, oba imata unikatna ID-ja, ampak sinček bo mel tuji ključ še od mame in ata.

Potem pa ko delaš query boš imel vzpostavljeno hirarhijo.

WarpedGone ::

kako lahko omejim, da FK vedno kaže na vrstico, ki ima enako vrednost atributa x?

Ne moreš, ne z referenčno integriteto.
FK pomeni foreign key in dobesedno pomeni: vrednosti v tem stolpcu so lahko samo vrednosti primarnega ključa neke (običano druge) relacije, v tvojem primeru kaže na isto relacijo (kar je OK). Preverja se samo konkretne stolpce FK, ne pa še kake druge zraven.

Trigger je najbolša šansa ampak te zna ugriznit ORAxxx: Table is mutating, trigger might not see it. So pristopi, kako pridit mimo tega.

Tle morajo trije s FKji povezani zapisi v isti tabeli vedno imeti enako vrednost v nekem stolpcu X.
Priporočam proceduralno rešitev, kjer maš ustrezne kontrole vgrajene v postopek, ki fila tabelo - upam da je to PLSQL koda in ne nek insert v neki client aplikaciji.
Zbogom in hvala za vse ribe

MrStein ::

Tody je izjavil:

Jah foren key so uporabni samo ko se vežejo na tuje tabele

Uporabni so tudi za isto tabelo. Preverjeno. ;)

WarpedGone je izjavil:

kako lahko omejim, da FK vedno kaže na vrstico, ki ima enako vrednost atributa x?

Ne moreš, ne z referenčno integriteto.

Pred tedni sem nekje na StackExchange bral podobno vprašanje in je rešitev bila z FK-ji (ali nekaj podobnega), se pa ne spomnim detajlov oziroma ne najdem več tega članka...
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Zgodovina sprememb…

  • spremenil: MrStein ()

klemenSLO ::

S CHECK Constrainti tudi lahko kontroliraš vrednosti glede na povezano tabelo:
recimo:
http://stackoverflow.com/questions/3880...
Life is not measured in minutes, but in MOMENTS...

MrStein ::

Super, tam je tudi primer z FK (manj kode, bolj elegantno).
Hvala.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

oracle 12 identity (the old way)

Oddelek: Programiranje
61060 (865) detroit
»

SQL Parent key not found

Oddelek: Programiranje
71062 (985) Ciklamen
»

Podatkovna baza - foreign key

Oddelek: Programiranje
5614 (531) abyssus
»

Baze ter relation med njimi

Oddelek: Programiranje
153342 (2903) Marat
»

Access- relacije

Oddelek: Programiranje
141936 (1777) ghost

Več podobnih tem