Viena-daudzas attiecības datu bāzē

Viena-pret-daudzu attiecību datu bāzē rodas tad, kad katram A tabulas ierakstam var būt daudzi saistīti ieraksti B tabulā, bet katram B tabulas ierakstam var būt tikai viens atbilstošs ieraksts A tabulā. Starp vienas attiecībām datu bāze ir visbiežāk izmantotais relāciju datu bāzes dizains, un tas ir labā dizaina pamatā.

Apsveriet attiecības starp skolotāju un kursiem, kurus viņi māca. Skolotājs var mācīt vairākus kursus, bet kursam nebūtu tādas pašas attiecības ar skolotāju.

Tāpēc par katru ierakstu Skolotāju tabulā kursu tabulā var būt daudz ierakstu. Šis ir viens pret daudziem attiecības: viens skolotājs vairākiem kursiem.

Kāpēc ir svarīgi nodibināt "viens pret daudziem" attiecības

Lai pārstāvētu "viena pret daudzu" attiecības, jums ir nepieciešams vismaz divas tabulas. Apskatīsim, kāpēc.

Varbūt mēs izveidojām Skolotāju galdu, kurā mēs gribējām ierakstīt nosaukumu un kursus. Mēs varētu to izstrādāt šādi:

Skolotāji un kursi
Teacher_ID Skolotāja vārds Kurss
Teacher_001 Karmena Bioloģija
Teacher_002 Veronika Matemātika
Teacher_003 Jorge Angļu

Ko darīt, ja Carmen mācīs divus vai vairākus kursus? Šim dizainam ir divas iespējas. Mēs varētu to vienkārši papildināt ar Carmen esošo ierakstu, piemēram:

Skolotāji un kursi
Teacher_ID Skolotājs _ Nosaukums Kurss
Teacher_001 Karmena Bioloģija, matemātika
Teacher_002 Veronika Matemātika
Teacher_003 Jorge Angļu

Tomēr iepriekš minētais dizains ir neelastīgs un vēlāk var radīt problēmas, mēģinot ievietot, rediģēt vai dzēst datus.

Tas apgrūtina datu meklēšanu. Šis dizains pārkāpj pirmo datu bāzes normalizēšanas principu - First Normal Form (1 Normatīvā forma) (1NF) , kas nosaka, ka katrai tabulas šūnai jābūt vienai, atsevišķai datu vienībai.

Vēl viena dizaina alternatīva varētu būt vienkārši pievienot otro ierakstu Carmen:

Skolotāji un kursi
Skolotājs _ID Skolotājs _ Nosaukums Kurss
Teacher_001 Karmena Bioloģija
Teacher_001 Karmena Matemātika
Teacher_002 Veronika Matemātika
Teacher_003 Jorge Angļu

Tas atbilst 1NF, bet tas joprojām ir nepietiekams datu bāzes dizains, jo tas rada atlaišanu un var nevajadzīgi uzpūsties ļoti lielu datu bāzi. Vēl svarīgāk ir tas, ka dati varētu kļūt pretrunīgi. Piemēram, kas tad, ja tiek mainīts Karmena vārds? Kāds, kas strādā ar datiem, var atjaunināt savu vārdu vienā ierakstā un to nevar atjaunināt otrajā ierakstā. Šis dizains pārkāpj otro parasto formu (2NF), kas atbilst 1NF, un tai ir arī jāizvairās no vairāku ierakstu atlaišanas, atdalot datu apakšgrupas vairākās tabulās un izveidojot attiecības starp tām.

Kā izveidot datubāzi ar daudzām attiecībām

Lai īstenotu "viens pret daudz" attiecības tabulā "Skolotāji un kursi", mēs sadalām tabulas divās daļās un izveidojam saites, izmantojot ārējo atslēgu .

Šeit mēs esam noņēmuši kursa kolonnu Skolotāju tabulā:

Skolotāji
Skolotājs _ID Skolotājs _ Nosaukums
Teacher_001 Karmena
Teacher_002 Veronika
Teacher_003 Jorge

Un šeit ir kursu galds. Ņemiet vērā, ka tā ārējā atslēga Teacher_ID sasaista kursu ar skolotāju skolotāju tabulā:

Kursi
Kurss_ID Kursa nosaukums Teacher_ID
Kurss_001 Bioloģija Teacher_001
Course_002 Matemātika Teacher_001
Course_003 Angļu Teacher_003

Mēs esam izveidojuši attiecības starp skolotājiem un kursu tabulu, izmantojot ārēju atslēgu.

Tas mums norāda, ka Carmen māca gan bioloģiju, gan matemātiku, un Jorge māca angļu valodu.

Mēs redzam, kā šis dizains novērš jebkādu iespējamu atlaišanu, ļauj atsevišķiem skolotājiem mācīt vairākus kursus un īsteno attiecības "viens pret daudziem".

Datu bāzes var īstenot arī savstarpējas attiecības un attiecības starp daudzām personām.