Posar una base de dades en el tercer formulari normal (3NF)

La tercera forma normal (3NF) és un principi de base de dades que admet la integritat de les dades basant-se en els principis de normalització de bases de dades proporcionats per First Normal Form (1NF) i Second Normal Form (2NF).

Tercer Requisit de forma normal

Hi ha dos requisits bàsics perquè una base de dades es trobi en tercera forma normal:

Sobre la dependència clau principal

Anem a explorar encara més el que volem dir amb el fet que totes les columnes han de dependre de la clau principal.

Si el valor d'una columna es pot derivar tant de la clau principal com d'una altra columna de la taula, infringeix 3NF. Penseu en la taula d'empleats amb aquestes columnes:

Els dos LastName i FirstName depenen només del valor de EmployeeID? Bé, podria LastName depenent de FirstName? No, perquè res inherent a LastName suggereix el valor de FirstName. Podria FirstName dependre de LastName? No una altra vegada, perquè el mateix és cert: qualsevol que sigui un LastName, no podria proporcionar cap suggeriment sobre el valor de FirstName. Per tant, aquesta taula és compatible amb 3NF.

Però consideri aquesta taula de vehicles:

El fabricant i el model podrien derivar-se del VehicleID, però el Model també podria derivar-se del fabricant perquè un model de vehicle només està fabricat per un fabricant en particular. Aquest disseny de la taula no és compatible amb 3NF i, per tant, podria provocar anomalies de dades. Per exemple, podeu actualitzar el fabricant sense actualitzar el model, introduint imprecisions.

Per fer-lo compatible, haurem de moure la columna dependent addicional a una altra taula i fer-ne referència mitjançant una clau externa. Això provocaria dues taules:

Taula de vehicles

A la taula següent, ModelID és una clau externa de la taula Models :

Taula de models

Aquesta nova taula assigna models als fabricants. Si voleu actualitzar qualsevol informació sobre un vehicle específic d'un model, ho faríeu en aquesta taula, en lloc de fer-ho a la taula Vehicles.

Camps derivats del model 3NF

Una taula pot contenir un camp derivat: un que es calcula en funció d'altres columnes de la taula. Per exemple, considereu aquesta taula d'ordres de widgets:

El total trenca el compliment de 3NF perquè es pot obtenir multiplicant el preu de la unitat per la quantitat, en comptes de dependre totalment de la clau principal. Hem de treure'l de la taula per complir amb la tercera forma normal.

De fet, des que es deriva, és millor no emmagatzemar-lo a la base de dades en absolut.

Simplement, podem calcular-la "sobre la marxa" quan realitzeu consultes de base de dades. Per exemple, és possible que hàgim utilitzat anteriorment aquesta consulta per recuperar els números i els totals de la comanda:

SELECCIONar OrderNumber, Total FROM WidgetOrders

Ara podem utilitzar la següent consulta:

SELECCIÓ OrderNumber, UnitPrice * Quantity AS Total FROM WidgetOrders

per aconseguir els mateixos resultats sense violar normes de normalització.