Mis vahe on identifitseerival ja mitteidentifitseerival seosel tabelite vahel?

Postitas Erki Eessaar 15.04.2024 17:12 (muudeti 15.04.2024 17:14)
Identifitseeriv seos tähendab, et vanemtabeli reas olev võtmeväärtus aitab identifitseerida lapstabelis olevat rida. Seetõttu on vanemtabeli võti, mis on lapstabelis välisvõtmeks, osaks lapstabeli võtmest. Teiste sõnadega, lapsel pole oma identiteeti, vaid ta on identifitseeritav vanema kaudu, laps ei saa eksisteerida ilma vanemata ja koos vanemaga tuleks kustutada ka laps. Eelnevast nähtub, et selliste seoste puhul tuleks määrata kompenseeriv tegevus ON DELETE CASCADE.

Näiteks oletame, et igal isikul on null või rohkem meiliaadressi ja null või üks kasutajakonto. Need on andmed isiku kohta, kuid on pandud eraldi tabelitesse (Meiliaadress ja Kasutajakonto), mis on välisvõtme kaudu seotud tabeliga Isik. Seosed tabelite Isik ja Meiliaadress ning Isik ja Kasutajakonto vahel on identifitseerivad seosed.

Isik(isik_id, perenimi)
Primaarvõti (isik_id)

Meiliaadress(isik_id, e_meil)
Primaarvõti (isik_id)
Alternatiivvõti (e_meil)
Välisvõti (isik_id) Viitab Isik (isik_id)

Kasutajakonto(isik_id, parool, on_aktiivne)
Primaarvõti (isik_id)
Välisvõti (isik_id) Viitab Isik (isik_id)

Kontseptuaalses andmemudelis öeldakse olemitüüpide Meiliaadress ja Kasutajakonto kohta, et need on nõrgad olemitüübid (weak entity types).
 
Mitteidentifitseeriv seos tähendab, et last ei identifitseerita vanema kaudu, lapsel on oma identiteet ja nende vahel ei ole eksistentsiaalset sõltuvust. Vanemtabeli võti ei ole osa lapstabeli võtmest ja vastava välisvõtme puhul ei kasutata ON DELETE CASCADE.

Isik(isik_id, perenimi)
Primaarvõti (isik_id)

Tellimus (tellimuse_kood, tellija, summa)
Primaarvõti (tellimuse_kood)
Välisvõti (tellija) Viitab Isik (isik_id)

Hinda postitust:

Keskmine hinne : 5.0