S'estableix una relació entre dues taules de base de dades quan una taula utilitza una clau estrangera que fa referència a la clau primària d'una altra taula. Aquest és el concepte bàsic darrere del terme base de dades relacional.
Com funciona una clau estrangera per establir una relació
Una clau primària identifica de manera única cada registre de la taula. És un tipus de clau candidata que sol ser la primera columna d'una taula i que la base de dades pot generar automàticament per garantir que sigui única. Una clau estrangera és una altra clau candidata (no la clau primària) que s'utilitza per enllaçar un registre amb dades d'una altra taula.
Per exemple, tingueu en compte aquestes dues taules que identifiquen quin professor imparteix quin curs. Aquí, la clau principal de la taula de cursos és Course_ID. La seva clau estrangera és Teacher_ID:
Course_ID | Nom_del_curs | Teacher_ID |
---|---|---|
Curs_001 | Biologia | Teacher_001 |
Curs_002 | Matemàtiques | Teacher_002 |
Curs_003 | Anglès | Teacher_003 |
Podeu veure que la clau estrangera a Cursos coincideix amb una clau primària a Teachers:
Teacher_ID | Nom_del_professor |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
Podem dir que la clau externa Teacher_ID va ajudar a establir una relació entre els cursos i les taules de professors.
Tipus de relacions de bases de dades
Feu servir claus externes o altres claus candidates, podeu implementar tres tipus de relacions entre taules:
Un a un
Aquest tipus de relació només permet un registre a cada costat de la relació. La clau primària només es relaciona amb un registre (o cap) en una altra taula. Per exemple, en un matrimoni, cada cònjuge només té un altre cònjuge. Aquest tipus de relació es pot implementar en una única taula i, per tant, no utilitza una clau estrangera.
Un a molts
Una relació d'un a molts permet que un sol registre d'una taula estigui relacionat amb diversos registres d'una altra taula. Penseu en una empresa amb una base de dades que tingui taules de clients i comandes.
Un sol client pot comprar diverses comandes, però una sola comanda no es pot enllaçar amb diversos clients. Per tant, la taula de comandes contindria una clau estrangera que coincideixi amb la clau primària de la taula de clients, mentre que la taula de clients no tindria cap clau estrangera que apuntés a la taula de comandes.
Molts a molts
Aquesta és una relació complexa en la qual molts registres d'una taula poden enllaçar amb molts registres d'una altra taula. Per exemple, és probable que la nostra empresa necessiti taules de clients i comandes, i probablement també necessiti una taula de productes.
Un cop més, la relació entre la taula Clients i Comandes és d'un a molts, però tingueu en compte la relació entre la taula Comandes i Productes. Una comanda pot contenir diversos productes i un producte podria estar enllaçat a diverses comandes, ja que diversos clients poden enviar una comanda que contingui alguns dels mateixos productes. Aquest tipus de relació requereix tres taules com a mínim.
Per què són importants les relacions amb bases de dades?
L'establiment de relacions coherents entre les taules de la base de dades ajuda a garantir la integritat de les dades, contribuint a la normalització de la base de dades. Per exemple, què passaria si no enllaçéssim cap taula mitjançant una clau estrangera i, en canvi, combinem les dades de les taules de cursos i professors, com ara:
Teacher_ID | Nom_del_professor | Curs |
---|---|---|
Teacher_001 | Carmen | Biologia, matemàtiques |
Teacher_002 | Veronica | Matemàtiques |
Teacher_003 | Jorge | Anglès |
Aquest disseny és inflexible i infringeix el primer principi de normalització de bases de dades, First Normal Form, que estableix que cada cel·la de la taula ha de contenir una única peça de dades discreta.
O potser vam decidir afegir un segon registre per a Carmen, per tal de fer complir 1NF:
Teacher_ID | Nom_del_professor | Curs |
---|---|---|
Teacher_001 | Carmen | Biologia |
Teacher_001 | Carmen | Matemàtiques |
Teacher_002 | Veronica | Matemàtiques |
Teacher_003 | Jorge | Anglès |
Aquest és encara un disseny feble, que introdueix duplicacions innecessàries i el que s'anomenen anomalies d'inserció de dades, la qual cosa significa que podria contribuir a dades inconsistents. Per exemple, si un professor té diversos registres, què passa si s'han d'editar algunes dades, però la persona que realitza l'edició de dades no s'adona que existeixen diversos registres? Aleshores, la taula contindria dades diferents per a la mateixa persona, sense cap manera clara d'identificar-la o evitar-la.
Dividir aquesta taula en dues taules, Professors i Cursos, crea la relació adequada entre les dades i, per tant, ajuda a garantir la coherència i la precisió de les dades.