Datubāzes ievietošana trešajā normālajā formā (3NF)

Trešā parastā forma (3NF) ir datu bāzes princips, kas atbalsta datu integritāti, pamatojoties uz pirmās normālās formas (1NF) un otrās normālās formas (2NF) sniegtajiem datu bāzes normalizācijas principiem .

Trešās Normālās formas prasības

Datu bāzei jābūt divām pamatprasībām, kas ir trešajā standarta formā:

Par primārās atslēgas atkarību

Tālāk mēs izpētīsim to, ko mēs domājam ar to, ka visām kolonnām jābūt atkarīgām no primārās atslēgas.

Ja kolonnas vērtību var iegūt no tabulas primārās atslēgas un citas kolonnas, tas pārkāpj 3NF. Apsveriet darbinieku tabulu ar šīm slejām:

Vai gan LastName, gan FirstName ir atkarīgi tikai no EmployeeID vērtības? Nu, varētu uzvārds atkarīgs no pirmā vārda? Nē, jo nekas, kas saistīts ar LastName, netieši norāda uz FirstName vērtību. Vai pirmās vārds var būt atkarīgs no uzvārda? Neviens atkal, jo tas pats ir taisnība: neatkarīgi no tā, kāds ir LastName, tas nevarēja sniegt norādi par FirstName vērtību. Tādēļ šī tabula atbilst 3NF prasībām.

Bet apsveriet šo Transportlīdzekļu tabulu:

Ražotājs un modelis varētu izrietēt no VehicleID, bet modelis varētu izrietēt arī no ražotāja, jo transportlīdzekļa modeli ražo tikai konkrēts ražotājs. Šis tabulas dizains ir neatbilstīgs 3NF, un tādēļ tas var radīt datu anomālijas. Piemēram, jūs varat atjaunināt ražotāju, nejauninot modeli, ieviešot neprecizitātes.

Lai tā būtu atbilstoša, mums vajadzētu pārvietot papildu atkarīgo kolonnu uz citu tabulu un norādīt to, izmantojot ārējo atslēgu. Tas radīs divas tabulas:

Transportlīdzekļi tabula

Tālāk esošajā tabulā ModelID ir ārējā atslēga modeļu tabulai:

Modeļu tabula

Šajā jaunajā tabulā ražotājiem tiek piedāvāti modeļi. Ja vēlaties atjaunināt jebkuru transportlīdzekļa informāciju, kas ir specifiska modelim, jūs to darītu šajā tabulā, nevis bultiņā Transportlīdzekļi.

Atvasinātie lauki 3NF modelī

Tabulā var būt atvasināts lauks - viens, kas aprēķināts, balstoties uz citām tabulas kolonnām. Piemēram, apsveriet šo widget pasūtījumu tabulu:

Kopējais bremzē 3NF atbilstību, jo to var iegūt, reizinot vienības cenu ar daudzumu, nevis pilnībā atkarībā no primārās atslēgas. Mums tas jānoņem no galda, lai izpildītu trešo parasto veidlapu.

Patiesībā, tā kā tas ir atvasināts, tas ir labāk, lai to neuzglabātu datu bāzē vispār.

Veicot datu bāzu vaicājumus, mēs varam to vienkārši aprēķināt "uz lidojuma". Piemēram, mēs, iespējams, iepriekš izmantojām šo vaicājumu, lai iegūtu pasūtījuma numurus un kopsummas.

SELECT OrderNumber, Total FROM WidgetOrders

Tagad mēs varam izmantot šādu vaicājumu:

SELECT OrderNumber, UnitPrice * Daudzums AS Kopā no WidgetOrders

lai sasniegtu tādus pašus rezultātus, nepārkāpjot normēšanas noteikumus.