Eviteu dependències transitives per ajudar a garantir la normalització
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_ID | Autor | Llibre | Autor_Nacionalitat |
---|---|---|---|
Auth_001 | Targeta Orson Scott | Ender's Game | Estats Units |
Auth_001 | Targeta Orson Scott | Ender's Game | Estats Units |
Auth_002 | Margaret Atwood | El conte de la esposa | Canadà |
A l'exemple d'AUTORS a dalt:
- Llibre → Autor : Aquí, l'atribut Book determina l'atribut Author . Si coneixeu el nom del llibre, podeu obtenir el nom de l'autor. Tanmateix, l' autor no determina el 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 → Author_Nationality : De la mateixa manera, l'atribut Author determina la AutorAnacional , 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_Nationality: 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_ID | Llibre | Autor_ID |
---|---|---|
Book_001 | Ender's Game | Auth_001 |
Book_001 | Fills de la ment | Auth_001 |
Book_002 | El conte de la esposa | Auth_002 |
AUTORS
Autor_ID | Autor | Autor_Nacionalitat |
---|---|---|
Auth_001 | Targeta Orson Scott | Estats Units |
Auth_002 | Margaret Atwood | Canadà |
Ha solucionat això? Anem a examinar les nostres dependències ara:
TAULA DE LLIBRES :
- Book_ID → Llibre: el llibre depèn de Book_ID .
- No existeixen altres dependències en aquesta taula, així que estem d'acord. Tingueu en compte que la clau externa Author_ID enllaç aquesta taula a la taula AUTHORS a través de la seva clau principal Author_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: l' autor depèn de l' autor_ID .
- Autor → Autor_Nationality: La nacionalitat pot ser determinada per l'autor.
- Autor_ID → Autor_Nationality: la nacionalitat es pot determinar a partir del Author_ID mitjançant l'atribut Author . Encara tenim una dependència transitiva.
Hem d'afegir una tercera taula per normalitzar aquestes dades:
PAÏSOS
Country_ID | País |
---|---|
Coun_001 | Estats Units |
Coun_002 | Canadà |
AUTORS
Autor_ID | Autor | Country_ID |
---|---|---|
Auth_001 | Targeta Orson Scott | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
Ara tenim tres taules, fent servir claus estrangeres per enllaçar entre les taules:
- La clau estrangera de la taula BOOK Author_ID connecta un llibre a un autor a la taula AUTHORS .
- La clau estrangera de la taula AUTHORS Country_ID connecta 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_ID | Autor | Llibre | Autor_Nacionalitat |
---|---|---|---|
Auth_001 | Targeta Orson Scott | Ender's Game | Estats Units |
Auth_001 | Targeta Orson Scott | Fills de la ment | Estats Units |
Auth_002 | Margaret Atwood | El conte de la esposa | Canadà |
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.