M2 - Bases de dades / UF1NF3: Model relacional

De wikiserver
Dreceres ràpides: navegació, cerca
          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.

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.