La tercera forma normal

La Tercera Forma Normal



Aquesta és la tercera part de la sèrie Cinc formes normals. Els títols de les dues primeres parts (tutorials) són First Normal Form, seguits de Segon Normal Form. En aquesta part de la sèrie s'explica la Tercera Forma Normal.

L'explicació segueix la línia de la història: un pare ha mort i ha deixat diners al seu fill. El fill va decidir invertir els diners en una botiga de conveniència. Una botiga de conveniència, també coneguda com a botiga de conveniència, és un petit comerç minorista que rep articles quotidians dels proveïdors i els ven a clients individuals del barri.







En aquest moment, la botiga ja està proveïda, i ja s'han fet algunes vendes. El fill, que és el propietari de l'empresa, té alguns empleats, que s'anomenen empleats en aquest tutorial. El propietari i qualsevol empleat poden rebre subministraments i realitzar vendes després de registrar els productes.



Tanmateix, abans de començar la botiga, ni el propietari ni els empleats sabien res de les formes normals. Per tant, ho estaven registrant tot com a transaccions en una taula i un quadern d'exercicis. No tenien ordinador.



Tu, el lector, has completat les cinc parts d'aquesta sèrie de tutorials; ara ets desenvolupador de bases de dades. El propietari de la botiga de conveniència és el teu amic. Vau visitar la botiga fa dos dies i vau formar el propietari i els empleats per produir una taula en la seva primera forma normal. També vau visitar la botiga ahir i els vau formar sobre com crear una taula en la segona forma normal a partir de la primera forma normal.





Avui, acabeu d'arribar a la botiga per fer una visita per formar-los sobre com produir una taula en la tercera forma normal a partir de la segona forma normal. Totes les taules que tenen actualment estan en la segona forma normal. Les taules (per nom i encapçalaments de columnes) són:

Productes (ID de producte, ID de categoria, producte)
Categories (ID de categoria, categoria)



Vendes (ID de venda, client, empleat, data)
Detalls de la venda (ID de venda, ID de producte, número de venut, preu de venda)

Comandes (ID de comanda, proveïdor, empleat, data)
Detalls de la comanda (ID de comanda, ID de producte, nombre comprat, preu de cost)

Les tecles simples o compostes estan subratllades.

Després de resumir el que s'ha ensenyat els dos dies anteriors i abans de poder fer res, el propietari pregunta:

“Què passa amb els números de telèfon, adreces, etc., per a clients i empleats?

Què passa amb la quantitat en estoc, el nivell de reordenació, etc., per als productes?
Necessiten les seves pròpies taules separades o s'han d'ajustar a les taules actuals?

Tu, el desenvolupador de la base de dades, respons:

“Enhorabona, propietari! Heu introduït indirectament el tema de la tercera forma normal'.

Tu continues.

Altres columnes necessàries

Primer s'afegeixen altres columnes necessàries a les taules anteriors, que es troben a 1NF i 2NF. Alguns dels noms de columnes anteriors es modifiquen.

Com a mínim, la taula Categories hauria de tenir les columnes següents:

Categories (ID de categoria, Nom de categoria, descripció)

La descripció és un paràgraf breu que descriu la categoria. Aquesta taula de categories ja es troba a 1NF, 2NF i 3NF. El 3NF s'explica a continuació:

Com a mínim, la taula Productes ha de tenir les columnes següents:

Productes (ID de producte, ID de categoria, ID de proveïdor, ProductName, unitPrice, quantityInStock, reorderLevel)

A mesura que es ven cada producte, s'aconseguirà un nivell (nombre) baix dels productes quan s'hagi de reordenar el producte, de manera que els clients no haurien d'acudir a la botiga i no disposar del producte. Aquesta absència no és bona per als negocis. quantityInStock és el nombre d'un producte concret en estoc. Això inclou el que hi ha a la botiga i el que hi ha al prestatge.

categoryID i supplierID són claus externes. És per això que tenen un guió subratllat en lloc d'un subratllat simple. A continuació s'explica la clau estrangera. A la part anterior de la sèrie (segona forma normal), la categoria ID formava part de la clau primària amb un únic subratllat a causa de com s'hi va arribar. Tanmateix, a partir de l'explicació següent, quedaria clar que l'ID de categoria hauria de ser una clau estrangera (amb un guió subratllat).

Aquesta taula de productes ja es troba a 1NF, 2NF i 3NF. Vegeu per què està a 3NF a continuació:

Com a mínim, la taula SaleDetails hauria de tenir les columnes següents:

Detalls de venda (ID de venda, ID de producte, Preu de venda unitari, quantitat, descompte)

S'espera que el valor de descompte sigui zero la major part del temps. Un descompte és el descompte que la botiga ofereix al client.

Com a mínim, la taula OrderDetails hauria de tenir les columnes següents:

Detalls de la comanda (ID de comanda, ID de producte, Preu cost unitari, quantitat, descompte)

S'espera que el valor de descompte sigui zero la major part del temps. El descompte aquí és el descompte que el proveïdor ofereix a la botiga.

Com es veu a continuació, la taula Productes es pot considerar a 2NF o 3NF. Les taules de vendes i comandes tenen el problema de 3NF. Només s'utilitzarà la taula de vendes per explicar el problema i la solució. La 3NF per a la taula de comandes i la taula de productes segueixen un raonament similar i només es citaria.

En afegir columnes, la taula de vendes seria:

Vendes (ID de venda, data Venda nom del client, telèfon, adreça, ciutat, regió, codi postal, país, empleat)

Set columnes han substituït la columna client a la taula original. Com que els clients són persones del barri, les cel·les de les columnes de la ciutat, la regió (estat), el codi postal i el país es poden deixar buides, encara que no es deixen buides en aquest article.

Aquesta taula de vendes encara es troba a 2NF, ja que les regles 1NF i 2NF no s'han infringit. Tanmateix, cal tenir en compte que en una fila de la taula de vendes, el client (nom) ha estat substituït per set cel·les de fila de client.

Nota: una cel·la d'adreça té el número de casa, el nom del carrer o de la carretera i el nom de la població, tots separats per comes. Es pot considerar que una ciutat està formada per diversos pobles. Tot i que les comes separen aquests components de cadena particulars, formen un valor de cel·la i no tres valors de cel·la.

La columna dels empleats també s'ha de substituir per set d'aquestes columnes. Tanmateix, això no es fa en aquest tutorial per estalviar temps i espai d'ensenyament. Així, una taula de vendes amb dades pot ser:

Taula de vendes - 2NF - Sense ID de client

La columna del tipus de dades SaleID és un nombre enter o, millor, un increment automàtic. El tipus de dades de la columna dateSold és una data i no un número perquè té el caràcter “/”, que no és un dígit. El tipus de dades per a la resta de columnes, inclosa la columna del telèfon, és cadena (o text). El valor del telèfon té el caràcter '-', que no és un dígit.

Tingueu en compte que, per a cada fila, el client (nom), com a la part anterior de la sèrie, s'ha substituït per set cel·les, una de les quals segueix sent nom-client. Això vol dir que les dades del client són una entitat. Actualment, el nom del client identifica les seves altres sis dades seguides. Si aquesta taula està programada, serà convenient identificar l'entitat del client a cada fila amb un nombre enter (no d'increment automàtic). En aquest cas, una columna customerID hauria de precedir el customerName. La taula anterior esdevé:

Taula de vendes - 2NF - Amb customerID

Hi ha tres ID de client: 1, 2 i 3, amb 1 que es produeix cinc vegades per a John Smith, 2 que es produeix dues vegades per a James Taylor i 3 que es produeix una vegada per a Susan Wright.

Tingueu en compte que alguns ID de client i les seves dependències es repeteixen.

Regles per a la tercera forma normal

Una taula està en tercera forma normal si compleix les regles següents:

  1. Ja hauria d'estar en la Segona Forma Normal.
  2. I no hauria de tenir Dependència Transitiva.

Aleshores un dels empleats (empleats) pregunta: 'Què és una dependència transitiva?'. I tu, el desenvolupador de la base de dades, respons: 'Aquesta és una bona pregunta!'

Dependència transitiva

És cert que en una fila, SaleID identifica tots els valors de la fila; tanmateix, customerID identifica els seus set valors de dades, però no identifica la resta dels valors identificats per SaleID en aquesta fila. Dit d'una altra manera, el SaleID depèn de deu valors de cel·les a cada fila. Tanmateix, el customerID depèn de set valors de cel·les de la mateixa fila, però el customerID no depèn del SaleID ni dels altres valors dels quals depèn SaleID.

Aquesta dependència per a l'ID del client és una dependència transitiva. I customerID s'anomena clau estrangera i està subratllat en guió en aquesta sèrie de tutorials, Les cinc formes normals.

Suposem que un atribut no principal (valor de cel·la no principal) depèn d'altres atributs no primers, i que l'atribut no principal en qüestió (per exemple, customerID i els seus dependents) no depèn de la clau primària i de la resta de la cel·la. valors a la fila. Aleshores això és dependència transitiva.

La taula de vendes anterior amb la clau estrangera i les seves dependències, causaria problemes comptables (anomalies).

Taula de vendes De 2NF a 3NF

Per resoldre el problema que planteja la clau estrangera i les seves dependències, elimineu la clau estrangera i les seves dependències, per formar una nova taula sense repeticions. Tanmateix, encara que la clau estrangera no depèn de la clau primària, la clau principal depèn de la clau estrangera. Per tant, una còpia de la clau estrangera ha de romandre a la taula pare. La nova taula de vendes, en aquest moment, és compatible amb 1NF, 2NF i 3NF; és una taula de pares. La nova taula secundària de la taula de vendes anterior també és compatible amb 1NF, 2NF i 3NF. El nom de la taula fill amb clau estrangera i les seves dependències, és Clients. Si no es pot trobar un nom adequat, hi ha alguna cosa que ha anat malament amb l'anàlisi. La nova taula de vendes a 3NF és:

Taula de vendes final a 3NF

Aquesta taula de 3NF té el mateix nombre de files que la de 2NF però amb menys columnes.

La notació de la taula per a aquesta taula de vendes final a 3NF és:

Vendes (ID de venda, data de venda, ID de client, ID de l'empleat)

L'ID de venda és la clau primària amb un sol subratllat. customerID és una clau estrangera, amb un guió subratllat. employeeID també és una clau estrangera amb un guió subratllat. Tingueu en compte que la situació dels empleats a la taula de vendes a 2NF és la mateixa que la situació del client. L'identificador de l'empleat i les seves pròpies dependències s'han de treure per formar una altra taula; queda una còpia de l'identificador de l'empleat.

Nota: SaleID, customerID i employeeID no formen una clau composta. SaleID depèn de customerID i employeeID.

La relació entre SaleID i customerID és de molts a un.

La taula de clients a 3NF

Aquesta taula té tres files en lloc de 9 a la taula de vendes 2NF. En aquesta taula, customerID és una clau primària. És el mateix que la clau estrangera a la taula de vendes, però sense repeticions. La clau estrangera a la taula Vendes i la clau primària a la taula Client enllacen ambdues taules.

Les files repetides de la taula de clients s'han eliminat per no infringir 1NF.

Com pot veure el lector, posar una taula a 3NF també solucionaria el problema de les files repetides (redundància).

La notació de la taula per a la taula de clients és:

Clients (ID del client, nom del client, telèfon, adreça, ciutat, regió, codi postal, país)

La taula de productes revisada

La taula de productes donada anteriorment en forma de notació és:

Productes (ID de producte, ID de categoria, ID de proveïdor, ProductName, unitPrice, quantityInStock, reorderLevel)

La clau principal aquí és productID. categoryID i supplierID són claus externes. De manera similar a la taula Client, hi ha una taula Categories, on categoryID és la clau primària, i hi ha una taula Supplier, on providerID és la clau primària.

Si els valors de les cel·les de unitPrice, quantityInStock i reorderLevel es mantindran fixos, aleshores la taula Productes, tal com està, està realment a 3NF. Si aquests valors canviaran, la taula Productes, tal com està, es troba a 2NF. En aquesta part de la sèrie de tutorials, se suposa que aquests valors romanen fixos al llarg del temps.

Totes les Taules

Totes les taules estan ara a 3NF. Es mostren com:

Empleats (ID de l'empleat, nom, telèfon, adreça, ciutat, regió, codi postal, país, data de naixement, data de contractació, data de publicació)

Proveïdors (ID del proveïdor, nom, telèfon, adreça, ciutat, regió, codi postal, país)

Productes (ID de producte, ID de categoria, ID de proveïdor, ProductName, unitPrice, quantityInStock, reorderLevel)
Categories (ID de categoria, Nom de categoria, descripció)

Vendes (ID de venda, data de venda, ID de client, ID de l'empleat)
Detalls de la venda (ID de venda, ID de producte, número de venut, preu de venda)
Clients (ID del client, nom del client, telèfon, adreça, ciutat, regió, codi postal, país)

Comandes (ID de comanda, data de venda, identificador de proveïdor, identificador d'empleat)
Detalls de la comanda (ID de comanda, ID de producte, nombre comprat, preu de cost)

S'han produït fins a nou taules professionals a partir d'una sola taula produïda per novells per evitar problemes de redundància i comptabilitat (anomalies de la inserció, eliminació i actualització). Només la taula de novells comportaria pèrdues financeres.

Prova el personal

En aquest punt, tots els empleats, inclòs el propietari, haurien d'haver entès 1NF, 2NF i 3NF. Tanmateix, s'han de provar. Tots ells, inclòs el propietari, s'asseuran en diferents llocs i completaran la prova. La prova, que consta d'una pregunta, tindrà una durada d'una hora, i és la següent:

Pregunta: Utilitzant regles per a 1NF, 2NF i 3NF, demostreu que les nou taules anteriors ja estan en la primera forma normal, la segona forma normal i la tercera forma normal. Els clients i proveïdors no han de ser entitats reals. Les dades de les taules haurien de fer una còpia de seguretat de les anotacions de les taules.

Mentre estan completant la prova, tu, com a desenvolupador de la base de dades, surts a prendre un berenar i una cervesa, per tornar al cap d'una hora.

El futur proper i llunyà

Mentre tu, el desenvolupador de bases de dades, estàs fora, també penses quins consells donar-los si tots passen la prova.

A més, mentre els entrenaves, i ara que fan la prova, els clients han anat venint i sortint sense ser atès. Això no és bo per als negocis, i tu, el desenvolupador de bases de dades, ho saps. Alguns clients poden anar a les botigues de la competència i no tornaran mai més.

Tu, el desenvolupador de la base de dades, tens 30 anys. El propietari, com a amic teu, també té 30 anys. Els empleats (empleats) tenen entre 18 i 24 anys. Totes les qualitats que necessitaven per treballar per al propietari eren: estar sans, saber llegir i escriure, saber sumar, restar, multiplicar i dividir. , i poder utilitzar l'ordinador i Internet.

Quan una taula es troba a 3NF, la majoria de les vulnerabilitats s'han eliminat de la base de dades. Moltes bases de dades comercials no van més enllà de 3NF, i les empreses o empreses se senten còmodes.

Així doncs, si tots passen la prova, demanareu als empleats que vagin a continuar treballant. També els aconsellareu que guardin part dels seus sous perquè puguin ser propietaris de les seves botigues de conveniència. Continuareu demà entrenant només el propietari a 4NF i 5NF. Amb el coneixement de 4NF i 5NF, s'eliminen totes les vulnerabilitats conegudes.

Avaluació

Després d'una hora, torneu vosaltres, el desenvolupador de la base de dades. Marqueu els seus guions. Una notícia excel·lent! Tots, inclòs el propietari, tenen el 100% cadascun. Hura! Això és excel·lent!

Per tant, moltes felicitats a tots vosaltres: el professor i els alumnes.

No hi ha res més a fer en aquest tutorial que no sigui concloure.

Conclusió

Una taula està en primera forma normal, si no infringeix cap de les regles següents:

  1. Totes les columnes d'una taula haurien de tenir noms de capçalera únics.
  2. Cada cel·la ha de tenir un sol valor.
  3. Els valors emmagatzemats en una columna han de ser del mateix tipus.
  4. Les files han de ser diferents.
  5. L'ordre de les columnes o files no importa.

Una taula està en segona forma normal, si no infringeix cap de les regles següents:

  1. La taula ja ha d'estar en primera forma normal.
  2. No hi ha d'haver cap dependència parcial.

Una taula està en tercera forma normal, si no infringeix cap de les regles següents:

  1. Ja ha d'estar en la Segona Forma Normal.
  2. I no ha de tenir Dependència Transitiva.

Tu, el desenvolupador de la base de dades, digues als empleats que n'han après prou. Doneu consells i els demaneu que tornin a la feina i es quedin a les seves estacions per defecte.

Només heu de concertar una cita amb el propietari, que tindrà lloc demà a la seva oficina per a la formació sobre 4NF i 5NF.