27. Bases de dades relacionals

Índex

 

Consultes sobre una base de dades relacionals

Molt sovint l'ús d'una sola taula és insuficient per a contenir adequadament totes les dades necessàries. En aquests casos cal recórrer a diverses taules, organitzades moltes vegades segons els criteris de les bases de dades relacionals

En particular, cal atendre als conceptes de clau primària i de clau secundària, i assegurar que a tota clau secundària en una taula correspongui una clau primària en una altra

Vegem per exemple l'estructura de la base de dades que farem servir en els exemples següents:

esquema

Per a cada Municipi hi ha una clau secundària, IdCom, que ha de coincidir amb el valor de la clau primària Id corresponent a la seva Comarca en la taula Comarques.Què passaria si a la taula de comarques no hi hagués la corresponent a un municipi inclòs en la taula de municipis?

Les formes de consultar una base de dades relacional són molt diverses, però cal distingir-hi dos supòsits bàsics diferents:

 

Consultes seqüencials relacionades

Consultes seqüencials significa que en cada moment presentem dades d'una única taula; relacionades significa que en la taula primària llegim el valor de la clau primària d'un registre i el fem servir com valor desitjat per a la clau secundària en la taula secundària, o al revés.

En l'exemple presentat abans hi ha aquestes dues possibilitats bàsiques:

Naturalment, en passar per cada taula recollim també els valors de tots els camps necessaris per al nostre propòsit.





Vegeu-ne el resultat.

 

Consultes conjuntes

El procediment usat en una consulta conjunta és molt diferent. Comencem establint totes les parelles possibles entre els registres d'una taula i els de l'altra. Aquest aparellament és conegut tècnicament com producte cartesià, i s'aconsegueix amb la clàusula INNER JOIN:

El producte cartesià per si sol pot tenir sentit o no tenir-ne. Suposem una taula amb els noms dels nois presents en una sala de ball, i una altra amb els noms de totes les noies presents en la mateixa sala. El producte cartesià ens indica totes les parelles de ball possibles. Però probablement alguns dels aparellaments possibles no s'han arribat a produir; cal una tercera taula que relacioni nois, noies i nombre de balls.

Si dues taules tenen una relació 1:n, com és el cas de les taules de comarques i de municipis, el producte cartesià no té cap sentit; és només una primera fase d'un conjunt que cal acotar mitjançant la coincidència entre la clau primària de la taula 1 (comarques) i la secundària de la taula n (municipis).

Per a formalitzar les coincidències es fa servir la clàusula ON:

que s'ha d'interpretar així: dels aparellaments possibles, mostra'm només els que compleixin tal condició.

En definitiva tenim:

Sovint succeeix que els camps de dues taules diferents tenen el mateix nom; en aquests casos cal desfer l'ambigüitat designant-los amb el nom de la taula i el nom del camp units per un punt:



Vegeu-ne el resultat.

La clàusula ON pot ésser completada amb una segona condició; per exemple restringir la consulta als municipis de més de 25.000 habitants. En aquest cas s'inclou la segona condició a cotinuació de la primera, unida a aquesta mitjançant un AND. A efectes pràctics, ON es comporta com WHERE.

 

Altes en una taula amb valors procedents d'una altra

Què passaria si donéssim d'alta un Municipi en la taula de Municipis i li assignéssim un codi de comarca inexistent? És molt important evitar errades com aquesta, i la millor solució és obligar a assignar les claus secundàries mitjançant desplegables que obtenen les dades de la taula principal, i així restringeixen l'elecció.

En l'exemple reiterat,

En definitiva, l'única cosa nova ara és la creació del desplegable dins el formulari:



Vegeu-ne el resultat.


Nota: Aquest exemple s'acaba amb la presentació del formulari; en una situació real, el botó d'activació ens portaria a un document d'altes similar als que ja hem vist; en aquest cas, però, ens retorna a aquest document que ara llegiu, i les dades, òbviament, es perden.