Skip to main content

Dependència transitiva en una base de dades

Anonim

Una dependència transitiva en una base de dades és una relació indirecta entre valors de la mateixa taula que provoca una dependència funcional. Per aconseguir l'estàndard de normalització del Formulari Tercer Normal (3NF), heu d'eliminar qualsevol dependència transitiva.

Per la seva naturalesa, una dependència transitiva requereix tres o més atributs (o columnes de la base de dades) que tenen una dependència funcional entre ells, el que significa que la columna A d'una taula es basa en la columna B a través d'una columna intermedi C.

Vegem com això pot funcionar.

Exemple de dependència transitiva

AUTORS

Autor_IDAutorLlibreAutor_Nacionalitat
Auth_001Targeta Orson ScottEnder's GameEstats Units
Auth_001Targeta Orson ScottEnder's GameEstats Units
Auth_002Margaret AtwoodEl conte de la esposaCanadà

A l'exemple d'AUTORS a dalt:

  • Llibre → Autor : Aquí, el Llibre atribut determina el fitxer Autor atribut Si coneixeu el nom del llibre, podeu obtenir el nom de l'autor. Malgrat això, Autor no determina Llibre , perquè un autor pot escriure diversos llibres. Per exemple, només perquè coneixem el nom de l'autor, Orson Scott Card, encara no coneixem el nom del llibre.
  • Autor → Autor_Nacionalitat : De la mateixa manera, el Autor atribut determina el fitxer Autor_Nacionalitat , però no al revés; només perquè sabem que la nacionalitat no vol dir que puguem determinar l'autor.

Però aquesta taula introdueix una dependència transitiva:

  • Llibre → Autor_Nacionalitat: Si coneixem el nom del llibre, podem determinar la nacionalitat a través de la columna Autor.

Evitar les dependències transitives

Per garantir el Formulari Tercer Normal, eliminem la dependència transitiva.

Podem començar eliminant la columna Llibre des de la taula dels autors i creant una taula de llibres separada:

LLIBRES

Book_IDLlibreAutor_ID
Book_001Ender's GameAuth_001
Book_001Fills de la mentAuth_001
Book_002El conte de la esposaAuth_002

AUTORS

Autor_IDAutorAutor_Nacionalitat
Auth_001Targeta Orson ScottEstats Units
Auth_002Margaret AtwoodCanadà

Ha solucionat això? Anem a examinar les nostres dependències ara:

TAULA DE LLIBRES:

  • Book_ID → Llibre: El Llibre depèn de la Book_ID .
  • No existeixen altres dependències en aquesta taula, així que estem d'acord. Tingueu en compte que la clau externa Autor_ID vincula aquesta taula a la taula AUTHORS a través de la seva clau principal Autor_ID . Hem creat una relació per evitar una dependència transitiva, un disseny clau de bases de dades relacionals.

Taula de AUTORS:

  • Autor_ID → Autor: El Autor depèn de la Autor_ID .
  • Autor → Autor_Nacionalitat: La nacionalitat pot ser determinada per l'autor.
  • Autor_ID → Autor_Nacionalitat: La nacionalitat es pot determinar a partir de la Autor_ID a través de Autor atribut Encara tenim una dependència transitiva.

Hem d'afegir una tercera taula per normalitzar aquestes dades:

PAÏSOS

Country_IDPaís
Coun_001Estats Units
Coun_002Canadà

AUTORS

Autor_IDAutorCountry_ID
Auth_001Targeta Orson ScottCoun_001
Auth_002Margaret AtwoodCoun_002

Ara tenim tres taules, fent servir claus estrangeres per enllaçar entre les taules:

  • La clau externa de la taula BOOK Autor_ID vincula un llibre a un autor a la taula AUTHORS.
  • La clau externa de la taula AUTHORS Country_ID vincula un autor a un país de la taula COUNTRIES.
  • La taula COUNTRIES no té cap clau externa, ja que no necessita cap enllaç a una altra taula d'aquest disseny.

Per què les dependències transitives són un disseny de base de dades incorrecte?

Quin és el valor d'evitar dependències transitives per ajudar a garantir 3NF? Anem a considerar la nostra primera taula de nou i veure els problemes que crea:

AUTORS

Autor_IDAutorLlibreAutor_Nacionalitat
Auth_001Targeta Orson ScottEnder's GameEstats Units
Auth_001Targeta Orson ScottFills de la mentEstats Units
Auth_002Margaret AtwoodEl conte de la esposaCanadà

Aquest tipus de disseny pot contribuir a anomalies de dades i inconsistències, per exemple:

  • Si suprimiu els dos llibres "Nens ​​de la ment" i "Ender's Game", suprimireu l'autor "Orson Scott Card" i la seva nacionalitat completament de la base de dades.
  • No podeu afegir un nou autor a la base de dades a menys que també afegiu un llibre; què passa si l'autor encara no està publicat o no sap el nom d'un llibre que ha escrit?
  • Si "Orson Scott Card" ha canviat la seva ciutadania, hauríeu de canviar-la en tots els registres en què apareix. Tenir diversos registres amb el mateix autor pot donar lloc a dades inexactes: què passa si la persona d'entrada de dades no s'adona que hi ha diversos registres per a ell i canvia les dades en només un registre?
  • No podeu esborrar un llibre com "The Handmaid's Tale", sense també eliminar completament l'autor.

Aquests són només alguns motius pels quals la normalització, i evitant dependències transitoris, protegeixen les dades i asseguren la coherència.