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ā:
- Datu bāzei jau jāatbilst gan 1NF, gan 2NF prasībām .
- Visām datu bāzu slejām jābūt atkarīgām no primārās atslēgas , kas nozīmē, ka jebkura sleja vērtību var iegūt tikai no primārās atslēgas.
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:
- Darbinieka ID
- Vārds
- Uzvārds
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:
- VehicleID
- Ražotājs
- Modelis
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:
- VehicleID
- Ražotājs
- ModelisID
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.
- ModelisID
- Ražotājs
- Modelis
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:
- Pasūtījuma numurs
- Klienta numurs
- Vienības cena
- Daudzums
- Kopā
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 WidgetOrdersTagad mēs varam izmantot šādu vaicājumu:
SELECT OrderNumber, UnitPrice * Daudzums AS Kopā no WidgetOrderslai sasniegtu tādus pašus rezultātus, nepārkāpjot normēšanas noteikumus.