Viens pret daudziem attiecības datu bāzē

Satura rādītājs:

Viens pret daudziem attiecības datu bāzē
Viens pret daudziem attiecības datu bāzē
Anonim

Attiecības viens pret vairākiem datu bāzē rodas, ja katram ierakstam tabulā A var būt daudz saistītu ierakstu tabulā B, bet katram ierakstam tabulā B var būt tikai viens atbilstošs ieraksts A tabulā.

Attiecības viens pret daudziem datu bāzē ir visizplatītākais relāciju datu bāzes dizains, un tas ir laba dizaina pamatā.

Datu bāzes var arī ieviest attiecības viens pret vienu un attiecības daudzi pret daudziem.

Image
Image

Attiecību viens pret daudziem piemērs

Apsveriet attiecības starp skolotāju un viņu pasniegtajiem kursiem. Skolotājs var pasniegt vairākas nodarbības, taču kursam nebūtu tādas pašas attiecības ar skolotāju.

Tādēļ katram ierakstam skolotāju tabulā var būt daudz ierakstu tabulā Kursi. Šis piemērs ilustrē attiecības viens pret daudziem: viens skolotājs vairākiem kursiem.

Kāpēc ir svarīgi izveidot attiecības viens pret daudziem

Lai attēlotu attiecības viens pret daudziem, ir nepieciešamas vismaz divas tabulas. Redzēsim, kāpēc.

Pirmās parastās formas dizaina ievērošana

Varbūt izveidojām tabulu, kurā vēlamies ierakstīt nosaukumu un pasniegtos kursus. Mēs varētu izveidot skolotāju un kursu tabulu šādi:

Skolotāja_ID Skolotāja_vārds Kurss
Skolotājs_001 Karmena Bioloģija
Skolotājs_002 Veronika Math
Skolotājs_003 Jorge angļu valoda

Ko darīt, ja Karmena māca divus vai vairākus kursus? Ar šo dizainu mums ir divas iespējas. Mēs varētu to pievienot Karmenas esošajam ierakstam, piemēram:

Skolotāja_ID Skolotājs_Vārds Kurss
Skolotājs_001 Karmena Bioloģija, matemātika
Skolotājs_002 Veronika Math
Skolotājs_003 Jorge angļu valoda

Tomēr iepriekš minētais dizains ir neelastīgs un var radīt problēmas vēlāk, ievietojot, rediģējot vai dzēšot datus. Tas apgrūtina datu meklēšanu.

Šis dizains pārkāpj arī pirmo datu bāzes normalizācijas principu - pirmo normālo formu (1NF), kas nosaka, ka katrā tabulas šūnā ir jāietver viens, diskrēts datu fragments.

Otrais parastās formas noteikums

Cita dizaina alternatīva varētu būt pievienot otru Karmenas ierakstu:

Skolotājs_ID Skolotājs_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

Šī pieeja atbilst 1NF, taču joprojām ir vājš datu bāzes dizains, jo tas rada dublēšanos un var nevajadzīgi uzpūst lielu datu bāzi. Vēl svarīgāk ir tas, ka dati var kļūt nekonsekventi.

Piemēram, kā būtu, ja mainītos Karmenas vārds? Kāds, kas strādā ar datiem, var atjaunināt viņas vārdu vienā ierakstā, bet neizdosies to atjaunināt otrajā ierakstā.

Šis dizains pārkāpj otrās parastās formas (2NF) standartu, kas atbilst 1NF, un tam ir arī jāizvairās no vairāku ierakstu dublēšanas. 2NF kārtula to panāk, atdalot datu apakškopas vairākās tabulās un izveidojot starp tām attiecības.

Kā izveidot datu bāzi ar vienlīdzīgām attiecībām

Lai tabulā Skolotāji un kursi ieviestu attiecību viens pret daudziem, sadaliet tabulas divās daļās un saistiet tās, izmantojot ārējo atslēgu.

Šeit mēs noņēmām sleju Kurss no tabulas Skolotāji:

Skolotājs_ID Skolotājs_Vārds
Skolotājs_001 Karmena
Skolotājs_002 Veronika
Skolotājs_003 Jorge

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

Kursa_ID Kursa_nosaukums Skolotāja_ID
Kurss_001 Bioloģija Skolotājs_001
Kurss_002 Math Skolotājs_001
Kurss_003 angļu valoda Skolotājs_003

Mēs esam izveidojuši attiecības starp skolotāju un kursu tabulu, izmantojot ārējo atslēgu. Šis izkārtojums mums parāda, ka Karmena māca gan bioloģiju, gan matemātiku un ka Horhe māca angļu valodu.

Mēs varam redzēt, kā šis dizains ļauj izvairīties no iespējamās atlaišanas, ļauj atsevišķiem skolotājiem mācīt vairākus kursus un ievieš attiecības viens pret daudziem.

Ieteicams: