M2 - Bases de dades / UF1NF3: Model relacional
El model relacional és un model de dades basat en dues disciplines matemàtiques: la lògica de predicats i la teoria de conjunts.
SGBD Acrònim de Sistema Gestor de Bases de Dades. És un programari especialitzat en la gestió de bases de dades (enteses, aquestes, com un conjunt estructurat d’informació).
Potser a causa d’aquest sòlid fonament teòric, que proporciona a aquest model una robustesa excepcional, els SGBD relacionals (o SGBDR) són actualment els que tenen una implantació més gran en el mercat. El model relacional va ser proposat originàriament per Edgar Frank Codd en el seu treball A Relational Model of Data for Large Shared Data Banks (‘Un model relacional de dades per a grans bancs de dades compartits’) l’any 1970, tot i que no es va implementar comercialment fins al final de la dècada.
E. F. Codd Codd treballava per a IBM, però no va ser aquesta multinacional qui va creure abans en les possibilitats del model relacional, sinó més aviat la competència, i molt especialment Oracle, empresa que va néixer, justament, amb el nom de Relational Software.
Contingut
Estructuració de les dades
El model relacional permet construir estructures de dades per representar les diferents informacions del món real que tinguin algun interès.
Les estructures de dades construïdes seguint el model relacional estan formades per conjunts de relacions.
Les relacions poden ser concebudes com a representacions tabulars de les dades.
Tuple En l’àmbit de les BD, podem definir tuple com una seqüència finita d’objectes que comprèn les diferents associacions entre cada atribut de la relació i un valor concret, admissible dins del domini respectiu.
Cal precisar els extrems següents:
- Tota relació ha de tenir un nom que la identifiqui unívocament dins de la base de dades.
- Cada fila està constituïda per un tuple de dades relacionades entre elles, anomenat també registre, que guarda les dades que ens interessa reflectir d’un objecte concret del món real.
- En canvi, cada columna conté, en cada cel·la, dades d’un mateix tipus, i se la pot anomenar atribut o camp.
- Cada cel·la, o intersecció entre fila i columna, pot emmagatzemar un únic valor.
Exemple de relació La següent taula reflecteix l’estructuració tabular de la relació ALUMNE, que conté les dades personals corresponents als individus matriculats en un centre docent. Cada fila conté unes quantes dades relacionades que, en aquest cas, són les que pertanyen a un mateix alumne. La relació té un nom (ALUMNE), com cadascuna de les columnes (DNI, Nom, Cognoms i Telefon). Si aquests noms són prou significatius, permeten copsar de seguida el sentit que tenen els valors de les dades emmagatzemades en la relació.
Taula Exemple de relació ALUMNE ------------------------------------------------- DNI Nom Cognoms Telefon 47126654F Josep Bel Rovira 453641282 51354897S Anna Pacheco Cuscó 723352151 56354981L Xavier Rius Montalvo 726922235
Tota base de dades relacional està formada per un conjunt de relacions.
Aquesta senzilla manera de visualitzar l’estructura de les bases de dades relacionals resulta molt entenedora per a la majoria d’usuaris. Però cal aprofundir en algunes característiques addicionals de les relacions, per talde poder-les distingir clarament dels fitxers tradicionals.
Domini
Pel que fa al model relacional, un domini consisteix en un conjunt finit de valors indivisibles.
Els atributs només poden prendre els valors que estiguin inclosos dins del domini respectiu. Altrament no són valors vàlids, i un SGBD relacional no en pot permetre l’emmagatzematge.
Exemples de dominis Examinem l’atribut Telefon de la relació ALUMNE. Si el definim de tal manera que només pugui emmagatzemar nou caràcters (perquè els telèfons sempre consten de nou dígits) de tipus numèric (ja que les lletres no poden formar part d’un número de telèfon), el domini d’aquest atribut inclourà totes les combinacions possibles (en concret, , que és una magnitud gran, però finita). Una altra cosa és que molts d’aquests valors no es podran correspondre mai amb valors existents en el món real (per exemple, difícilment un operador assignarà a un dels seus abonats una cadena de nou zeros com a identificador telefònic). Per aconseguir-ho, caldria restringir força més el domini de l’atribut a l’hora de definir-lo. Centrem-nos ara en l’atribut Cognoms. Contindrà els valors dels dos cognoms dels alumnes que els tinguin, separats per un espai en blanc. Per tant, aquest camp està definit per tal que pugui emmagatzemar dos objectes del món real: primer cognom i segon cognom. Conceptualment, els usuaris podran distingir entre els dos objectes representats, i els programadors d’aplicacions podran truncar, en cas necessari, el resultat obtingut en fer una consulta del camp Cognoms. Però tot SGBD relacional considerarà el valor contingut en l’atribut Cognoms de manera atòmica, sense cap estructuració interna.
Hem de considerar dues tipologies de dominis:
- Dominis predefinits. Són els tipus de dades que admeti cada SGBD, com, per exemple (esmentats de manera genèrica, ja que hi ha moltes especificitats en funció dels diferents sistemes gestors), les cadenes de caràcters, els
nombres enters, els nombres decimals, les dades de caire cronològic, etc.
- Dominis definits pels usuaris. Consisteixen en restriccions addicionals aplicades sobre el domini predefinit d’alguns atributs, establertes pels dissenyadors i pels administradors de bases de dades.
Exemple de domini definit per l'usuari En una relació per emmagatzemar les dades dels aspirants a mosso d’esquadra, es podria establir el camp IMC, per registrar els índexs de massa corporal respectius. Doncs bé, es podria restringir el domini d’aquest camp de tal manera que no admetés aspirants amb valors inferiors a dinou ni superiors a trenta, ja que la normativa no ho permet.
Esquema i extensió
Tota relació consta d’un esquema (també anomenat intensió de la relació) i de la seva extensió.
L’esquema d’una relació consisteix en un nom que la identifica unívocament dins de la base de dades, i en el conjunt d’atributs que aquella conté.
És molt recomanable, per tal d’evitar confusions en la implementació ulterior, seguir uniformement una notació concreta a l’hora d’expressar els esquemes de les relacions que formen una mateixa base de dades.
A continuació, es detallen les característiques d’un dels sistemes de notació més freqüents:
- Cal escriure el nom de les relacions amb majúscules i preferiblement en singular.
- S’ha d’escriure el nom dels atributs començant amb majúscula i continuant amb minúscules, sempre que no es tracti de sigles, ja que aleshores és més convenient deixar totes les lletres amb majúscules (com ara DNI). Per tal de fer els noms compostos més llegidors, es pot encapçalar cada paraula de les que formen el nom del camp amb una lletra majúscula (per exemple: DataNaixement, TelefonParticular, etc.).
Exemple d'esquema d'una relació L’esquema de la relació que es mostra en la taula.2, conforme al sistema de notació proposat, quedaria com segueix: ALUMNE(DNI, Nom, Cognoms, Telefon) Cal precisar que l’ordre en què ens mostrin els atributs és indiferent, per definició del model relacional.
Taula Exemple de relació ALUMNE ------------------------------------------------ DNI Nom Cognoms Telefon 47126654F Josep Bel Rovira 453641282 51354897S Anna Pacheco Cuscó 723352151 56354981L Xavier Rius Montalvo 726922235
Els atributs d’una relació són únics dins d’aquesta. El seu nom no pot estar repetit dins d’una mateixa relació. Ara bé, diferents relacions sí que poden contenir atributs amb el mateix nom.
D’altra banda, cal dir que els dominis de diferents atributs d’una mateixa relació poden ser idèntics, malgrat que els camps respectius emmagatzemin els valors de diferents propietats de l’objecte (per exemple, seria perfectament lògic que els atributs TelefonFix, TelefonMobil i TelefonFeina, tot i pertànyer a una mateixa relació, tinguessin el mateix domini).
L’extensió d’una relació consisteix en els valors de les dades emmagatzemades en tots els tuples que aquesta conté.
Exemple d'extensió Si prenem com a base, una vegada més, la relació amb esquema ALUMNE(DNI, Nom, Cognoms, Telefon) de la taula 2, la seva extensió seria una llista en què figurarien tots els alumnes de la base de dades: Alumne 1: 47126654F, Josep, Bel Rovira, 453641282 Alumne 2: 51354897S, Anna, Pacheco Cuscó, 723352151 Alumne 3: 56354981L, Xavier, Rius Montalvo, 726922235
De vegades, els atributs de les relacions poden no contenir cap valor o, dit d’una altra manera, poden contenir valors nuls.
Exemple de valor nul Imaginem que s’hi matricula un quart alumne que no té telèfon. Les seves dades en la coneguda relació amb esquema ALUMNE(DNI, Nom, Cognoms, Telefon) reflectiran aquesta circumstància amb l’absència de valor en l’atribut Telefon del tuple que li correspongui. En utilitzar representacions tabulars per visualitzar els valors de les extensions de les relacions (en el pla teòric, no en implementacions reals amb SGBD), per tal d’indicar que una cel·la té valor nul s’hi pot incloure el mot NUL (com en la taula.3), o bé es pot deixar en blanc, simplement.
Taula Exemple de relació amb valors nuls ALUMNE ------------------------------------------- DNI Nom Cognoms Telefon 47126654F Josep Bel Rovira 453641282 51354897S Anna Pacheco Cuscó 723352151 56354981L Xavier Rius Montalvo 726922235 24583215W Mariona Castellví Mur NUL
El grau d’una relació depèn del nombre d’atributs que inclou el seu esquema.
Exemple de grau d'una relació La relació amb esquema ALUMNE(DNI, Nom, Cognoms, Telefon) de la taula 3 és de grau 4, perquè té quatre atributs.
La cardinalitat d’una relació ve donada pel nombre de tuples que en formen l’extensió.
Exemple de cardinalitat Si ens fixem en la taula.3, la cardinalitat de la relació ALUMNE és 4, perquè la seva extensió conté quatre tuples corresponents als quatre alumnes que, de moment, hi ha matriculats.
Claus candidates, clau primària i claus alternatives
Per tal de resultar útil, l’emmagatzematge de la informació ha de permetre la identificació de les dades. En l’àmbit de les bases de dades relacionals, els tuples de les relacions s’identifiquen mitjançant les anomenades superclaus.
Una superclau és un subconjunt dels atributs que formen l’esquema d’una relació tal que no és possible que hi hagi més d’un tuple en l’extensió respectiva, amb la mateixa combinació de valors en els atributs que formen part del subconjunt esmentat.
Però una superclau pot contenir atributs innecessaris, que no contribueixen a la identificació inequívoca dels diferents tuples. El que habitualment interessa és treballar amb superclaus mínimes, tals que cap subconjunt propi sigui capaç per sí sol d’identificar els tuples de la relació.
Per definició, cap superclau mínima no pot admetre valors nuls en cap dels seus atributs, perquè si ho fes, no podria garantir la identificació inequívoca dels tuples que continguessin algun valor nul en alguns dels atributs de la superclau mínima en qüestió.
D’altra banda, cal dir que en una mateixa relació pot passar que hi hagi més d’una superclau mínima que permeti distingir els tuples unívocament entre ells.
S’anomenen claus candidates totes les superclaus mínimes d’una relació formades pels atributs o conjunts d’atributs que permeten identificar els tuples que conté la seva extensió.
Tria de la clau primària Amb molta freqüència, és l’administrador de la BD qui tria la clau primària de la relació, d’entre les claus candidates disponibles, tot realitzant, en el fons, tasques de dissenyador lògic.
Però, a l’hora d’implementar una BD, entre totes les claus candidates de cada relació només se n’ha de triar una.
Quan parlem de clau primària ens referim a la clau que, finalment, el dissenyador lògic de la base de dades tria per distingir unívocament cada tuple d’una relació de la resta.
Aleshores, les claus candidates no triades com a clau primària resten presents en la relació.
Quan una relació ja té establerta una clau primària, la resta de claus presents en aquella, i que també podrien servir per identificar els diferents tuples de l’extensió respectiva, es coneixen com a claus alternatives.
Una forma de diferenciar els atributs que formen la clau primària de les relacions, dels altres atributs de l’esquema respectiu, és posar-los subratllats. Per aquest motiu, normalment es col·loquen junts i abans que la resta d’atributs, dins de l’esquema. Però només es tracta d’una qüestió d’elegància, ja que el model relacional no es basa ni en l’ordre dels atributs de l’esquema, ni tampoc en l’ordre dels tuples de l’extensió de la relació.
Exemples de claus candidates, primària i alternatives Observant la taula.4, podem imaginar que la relació ALUMNE té uns quants atributs més, de manera que el seu esquema queda com segueix: ALUMNE(DNI, NumSS, NumMatricula, Nom, Cognoms, Telefon) Veurem fàcilment com els atributs DNI, NumSS (número de la Seguretat Social) i NumMatricula, en ser personals i irrepetibles, ens podrien servir per identificar unívocament els alumnes. Per tant, serien claus candidates. Aleshores, el dissenyador de BD s’haurà de decidir per una clau candidata com a clau primària. Si, per exemple, tria DNI com a clau primària, les antigues claus candidates restants es passaran a considerar claus alternatives. En aquest cas, doncs, l’esquema resultant haurà de reflectir quina és la clau primària de la relació, tot subratllant l’atribut DNI: ALUMNE(DNI, NumSS, NumMatricula, Nom, Cognoms, Telefon)
Taula Exemple de relació amb valors nuls ALUMNE DNI Nom Cognoms Telefon 47126654F Josep Bel Rovira 453641282 51354897S Anna Pacheco Cuscó 723352151 56354981L Xavier Rius Montalvo 726922235 24583215W Mariona Castellví Mur NUL
Si no es disposa d’un atribut que sigui capaç d’identificar els tuples de la relació per si sol, cal buscar un subconjunt d’atributs, tals que la combinació dels valors que adoptin no es pugui repetir. Si aquesta possibilitat no existeix, cal afegir a la relació un atribut addicional que faci d’identificador.
Per definició, el model relacional no admet tuples repetits, és a dir, no permet l’existència de tuples en una mateixa relació que tinguin els mateixos valors en cadascun dels atributs.
Ara bé, les implementacions concretes dels diferents SGBD sí que permeten aquesta possibilitat, sempre que no s’estableixi cap clau primària en la relació amb tuples repetits.
Aquesta permissivitat de vegades permet solucionar certes eventualitats, però no hauria de ser la manera habitual de treballar amb BD relacionals.