27. Bases de dades relacionals

Índex

 

Consultes sobre una base de dades relacionals

Cal començar amb una obvietat: per tal de consultar amb profit una base de dades relacional, cal que aquest estigui ben construïda. En particular, cal que la taula secundària tingui un índex secundari que coincideixi amb un índex primari de la taula principal.

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.

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

 

Consultes relacionades però separades

Consultes separades significa qu en cada moment presentem dades d'una mateixa 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ò 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 això es fa servir la clàusula ON:

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 qua ara llegiu, i les dades, òbviament, es perden.