Attiecības tiek izveidotas starp divām datu bāzes tabulām, ja viena tabula izmanto ārējo atslēgu, kas atsaucas uz citas tabulas primāro atslēgu. Šis ir termina relāciju datubāze pamatjēdziens.
Kā ārējā atslēga darbojas, lai izveidotu attiecības
Primārā atslēga unikāli identificē katru ierakstu tabulā. Tas ir kandidāta atslēgas veids, kas parasti ir tabulas pirmā kolonna, un to var automātiski ģenerēt datu bāze, lai nodrošinātu, ka tā ir unikāla. Ārējā atslēga ir cita kandidāta atslēga (nevis primārā atslēga), ko izmanto, lai saistītu ierakstu ar datiem citā tabulā.
Piemēram, apsveriet šīs divas tabulas, kurās norādīts, kurš skolotājs kuru kursu māca. Šeit tabulas Kursi primārā atslēga ir Course_ID. Tās ārējā atslēga ir Teacher_ID:
Kursa_ID | Kursa_nosaukums | Skolotāja_ID |
---|---|---|
Kurss_001 | Bioloģija | Skolotājs_001 |
Kurss_002 | Math | Skolotājs_002 |
Kurss_003 | angļu valoda | Skolotājs_003 |
Var redzēt, ka kursi ārējā atslēga atbilst primārajai atslēgai sadaļā Skolotāji:
Skolotāja_ID | Skolotāja_vārds |
---|---|
Skolotājs_001 | Karmena |
Skolotājs_002 | Veronika |
Skolotājs_003 | Jorge |
Varam teikt, ka skolotāja_ID ārējā atslēga palīdzēja izveidot saistību starp kursiem un skolotāju tabulām.
Datu bāzu attiecību veidi
Izmantojot ārējās atslēgas vai citas iespējamās atslēgas, varat ieviest trīs veidu attiecības starp tabulām:
Viens pret vienu
Šāda veida attiecības pieļauj tikai vienu ierakstu katrā attiecību pusē. Primārā atslēga attiecas tikai uz vienu ierakstu (vai nevienu) citā tabulā. Piemēram, laulībā katram laulātajam ir tikai viens otrs laulātais. Šāda veida attiecības var ieviest vienā tabulā, un tāpēc tajā netiek izmantota ārējā atslēga.
Viens pret daudziem
Attiecības viens pret daudziem ļauj vienu ierakstu vienā tabulā saistīt ar vairākiem ierakstiem citā tabulā. Apsveriet iespēju izveidot uzņēmumu ar datu bāzi, kurā ir klientu un pasūtījumu tabulas.
Viens klients var iegādāties vairākus pasūtījumus, taču vienu pasūtījumu nevarēja saistīt ar vairākiem klientiem. Tāpēc tabulā Pasūtījumi būtu ārējā atslēga, kas atbilstu tabulas Klienti primārajai atslēgai, savukārt tabulā Klienti nebūtu ārējās atslēgas, kas norādītu uz tabulu Pasūtījumi.
Daudzi pret daudziem
Šīs ir sarežģītas attiecības, kurās daudzi ieraksti tabulā var saistīt ar daudziem ierakstiem citā tabulā. Piemēram, mūsu uzņēmumam, iespējams, ir vajadzīgas klientu un pasūtījumu tabulas, kā arī produktu tabula.
Atkal, attiecības starp tabulu Klienti un pasūtījumi ir viens pret daudziem, taču ņemiet vērā saistību starp tabulu Pasūtījumi un produkti. Pasūtījumā var būt vairāki produkti, un produkts var būt saistīts ar vairākiem pasūtījumiem, jo vairāki klienti var iesniegt pasūtījumu, kurā ir daži no tiem pašiem produktiem. Šāda veida attiecībām ir nepieciešamas vismaz trīs tabulas.
Kāpēc datu bāzu attiecības ir svarīgas?
Konsekventu attiecību izveide starp datu bāzes tabulām palīdz nodrošināt datu integritāti, veicinot datu bāzes normalizēšanu. Piemēram, kā būtu, ja mēs nesaistītu nevienu tabulu, izmantojot ārējo atslēgu, bet tā vietā apvienotu datus tabulās Kursi un skolotāji, piemēram:
Skolotāja_ID | Skolotāja_vārds | Kurss |
---|---|---|
Skolotājs_001 | Karmena | Bioloģija, matemātika |
Skolotājs_002 | Veronika | Math |
Skolotājs_003 | Jorge | angļu valoda |
Šis dizains ir neelastīgs un pārkāpj pirmo datu bāzes normalizācijas principu - pirmo normālo formu, kas nosaka, ka katrā tabulas šūnā ir jāietver viens, diskrēts datu fragments.
Vai varbūt mēs nolēmām pievienot otru Karmenas ierakstu, lai īstenotu 1NF:
Skolotāja_ID | Skolotāja_vārds | Kurss |
---|---|---|
Skolotājs_001 | Karmena | Bioloģija |
Skolotājs_001 | Karmena | Math |
Skolotājs_002 | Veronika | Math |
Skolotājs_003 | Jorge | angļu valoda |
Šis joprojām ir vājš dizains, kas rada nevajadzīgu dublēšanos un tā sauktās datu ievietošanas anomālijas, kas nozīmē, ka tas var veicināt pretrunīgus datus. Piemēram, ja skolotājam ir vairāki ieraksti, ko darīt, ja daži dati ir jārediģē, bet persona, kas veic datu rediģēšanu, neapzinās, ka pastāv vairāki ieraksti? Tad tabulā būtu ietverti dažādi dati par vienu un to pašu personu, bez skaidra veida, kā to identificēt vai izvairīties no tā.
Sadalot šo tabulu divās tabulās - skolotāji un kursi, tiek izveidotas pareizas attiecības starp datiem un tādējādi tiek nodrošināta datu konsekvence un precizitāte.