ACCESS - NIVELL 3
Capítol 1 - Relacionar taules

En aplicacions reals, una base de dades està formada per diverses taules relacionades entre elles.
Les relacions entre taules serveixen per evitar introduir informació duplicada, estalviar temps i evitar errades i inconsistències a la base de dades.

Posem un exemple concret.
Ens han encarregat el disseny d'una base de dades per gestionar els préstecs d'una biblioteca.
Suposarem que només hi ha un exemplar de cada llibre i que cada persona pot demanar tants llibres com vulgui (sempre que no estiguin ja prestats, evidentment).
A més de les dades del llibre (codi, títol i autor) necessitarem saber com a mínim el DNI, nom i telèfon de la persona a qui hem prestat el llibre. Per simplificar, no tindrem en compte la data de préstec i/o de retorn.

Per no complicar-nos la vida, decidim (incorrectament) fer-ho amb una sola taula.
La taula podria quedar més o menys així:

Quin problemes ens podem trobar si ho fem així?
- Cada cop que deixem un llibre cal introduir totes les dades de la persona. Això suposa una pèrdua de temps ja que cal escriure dades que ja teníem introduïdes i augmenta la possibilitat de què ens equivoquem en alguna lletra o número. A més, només que canviem alguna lletra del nom (minúscules per majúscules, accents, espais...) resultarà difícil (si no impossible) trobar tots els llibres que té, quedant la base de dades inconsistent.
- Si la persona canvia de domicili o de telèfon cal canviar-ho a tots els llibres que té en préstec (dades duplicades). Haurem de buscar tots els llibres que té i canviar-ho a tots (més pérdua de temps). Al fer tants de canvis és fàcil equivocar-se (més errors). Si el nom de la persona no està escrit exactament igual a tot arreu, és possible que no trobem tots els llibres que té i per tant en alguns llibres hi haurà l'adreça o telèfon nou i en d'altres l'antic (més inconsistència a la base de dades).

Ara que hem vist els problemes decidim fer el disseny utilitzant dues taules, una pels socis i una altra pels llibres.
Les taules quedaran més o menys així (els camps clau són el Codi del llibre i el DNI del soci):

Amb aquest sistema evitem els inconvenients anteriors:
- Quan deixem un llibre només caldrà introduir el codi del soci. Evitem haver d'escriure cada cop totes les dades de la persona, per tant estalviarem temps i evitarem errades i inconsistències a la base de dades.
Evidentment, sempre podem equivocar-nos al escriure el codi però és menys probable i es podria evitar utilitzant un lector de codis de barres.
- Si hem de canviar alguna de les dades del soci només cal fer-ho una vegada a la taula de socis. No caldrà fer-ho repetidament, per tant estalviarem temps i evitarem errors i inconsistències.

Tal com estan ara aquestes taules no es pot saber a qui s'ha prestat cada llibre, però això ho solucionarem relacionant les dues taules.

El cas més habitual de relació entre taules és quan un element d'una de les taules pot estar relacionat amb diversos elements de l'altra. D'això se'n diu una relació 1 a N.

Per exemple, en el cas de la biblioteca, si tenim les dues taules anteriors, es pot veure que un soci pot tenir més d'un llibre, però cada llibre només pot estar prestat a un soci (per simplificar hem suposat que només tenim un exemplar de cada llibre).

Ara bé, per poder relacionar dues taules cal que tinguin al menys un camp en comú.
El problema és: quin camp hem d'afegir i en quina taula?

Per crear relacions 1 a N hem d'afegir en una de les taules un camp que sigui igual que el camp clau de l'altra taula, per tant tenim dues possibilitats:
1 - Afegir el camp Codi del llibre a la taula Socis (incorrecte)
2 - Afegir el camp DNI del soci a la taula Llibres (correcte)

La forma més fàcil de saber quina és l'opció correcta és buscar com és la relació 1 a N.
L'enunciat del problema diu que un soci pot tenir més d'un llibre, per tant la relació és:
1 soci --> N llibres

Un cop hem trobat aquesta relació, la taula on hem d'afegir el camp sempre és la taula que té la N, la taula Llibres, i el camp ja hem dit que havia de ser el camp clau de l'altra taula, per tant serà el camp DNI del soci.
Aquest camp comú és el que permetrà relacionar les dues taules.

ATENCIÓ: el camp que hem d'afegir ha de ser del mateix tipus, mida i format que el camp clau de l'altra taula, però si el camp clau de l'altra taula és de tipus Autonumérico, el camp afegit ha de ser de tipus Numérico amb el format Entero largo.

Un cop afegit aquest camp, les taules quedaran així:

Ja només ens falta indicar a l'Access que aquestes dues taules estan relacionades a traves del camp DNI del soci.

Per fer-ho, primer clicarem al botó (només apareix si seleccionem la finestra principal de la base de dades).

Apareixerà una finestra amb un diàleg on haurem de seleccionar les taules, fer clic al botó Agregar i tancar el diàleg.

Ara tindrem totes les taules però sense cap relació. Per relacionar-les haurem d'arrossegar el camp afegit fins al camp clau relacionat, com mostra la imatge.

Apareixerà un diàleg en el que convé marcar la casella Exigir integridad referencial i també Actualizar en cascada. Això evitarà que la base de dades quedi inconsistent:

  • Exigir integridad referencial serveix per evitar que a la taula Llibres s'introdueixin DNIs inexistents a la taula de Socis.
  • Actualizar en cascada serveix perquè si es canvia un DNI a la taula Socis, també es canviï automàticament a la taula Llibres.
  • Eliminar en cascada serveix per eliminar registres relacionats. Si eliminem un soci, també eliminarà automàticament els llibres que tingui prestats. En la majoria de casos aquesta opció no s'ha de marcar. Si no està marcada, quan intentem esborrar un soci que té llibres prestats ens avisarà que no és possible.

Si tenim més de dues taules, cal repetir aquesta operació amb totes les relacions que necessitem.
En una base de dades ben dissenyada totes les taules haurien de tenir com a mínim una relació.

Quan tanquem la finestra de relacions ens demanarà si volem guardar els canvis i li haurem de dir que sí.

ATENCIÓ: és molt recomanable no introduir dades a les taules abans de relacionar-les, especialment en els camps que hem afegit per poder-les relacionar.

ApuntsOfficeAccess
ÍndexSegüent