Skip to main content

Viena-daudzas attiecības datu bāzē

Anonim

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 izveidot daudzu attiecību

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 galdu, kurā mēs vēlējāmies ierakstīt nosaukumu un kursus. Mēs varētu to izstrādāt šādi:

Skolotāji un kursi
Teacher_IDSkolotāja vārdsKurss
Teacher_001KarmenaBioloģija
Teacher_002VeronikaMatemātika
Teacher_003JorgeAngļ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_IDSkolotājs_ NosaukumsKurss
Teacher_001KarmenaBioloģija, matemātika
Teacher_002VeronikaMatemātika
Teacher_003JorgeAngļ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_IDSkolotājs_ NosaukumsKurss
Teacher_001KarmenaBioloģija
Teacher_001KarmenaMatemātika
Teacher_002VeronikaMatemātika
Teacher_003JorgeAngļ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_IDSkolotājs_ Nosaukums
Teacher_001Karmena
Teacher_002Veronika
Teacher_003Jorge

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_IDKursa nosaukumsTeacher_ID
Kurss_001BioloģijaTeacher_001
Course_002MatemātikaTeacher_001
Course_003AngļuTeacher_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.