------------------------------------- Les bases de dades relacionals ------------------------------------- Una base de dades relacional organitza les dades en una o més **entitats i relacions** entre elles. .. figure:: exemple_bbdd.svg :width: 80 % Exemple de base de dades dels cursos impartits en un conjunt de centres docents La implementació d'aquest model sol utilitzar **taules** de **files** i **columnes**, amb una **clau única** que identifica cada fila. Les files també s'anomenen **registres** o tuples. Les columnes també s'anomenen **camps o atributs**. Generalment, cada taula/relació representa un "tipus d'entitat" (com ara "estudiant", "curs" o "centre docent"). Els registres representen instàncies d'aquest tipus d'entitat (com ara "Puig Serra" o "Història contemporània") i les columnes representen valors d'atribuïts a aquesta instància (com ara "dni" o "adreça"). Cada fila d'una taula té la seva pròpia **clau única**. Les files d'una taula es poden enllaçar amb files d'altres taules afegint una columna per a la clau única de la fila enllaçada. Aquestes columnes es coneixen com a **claus foranes**. Relacions entre entitats ------------------------ En el model relacional, s'accedeix a les dades emmagatzemades com a relacions. Les relacions que es desen s'anomenen "relacions base" i s'implementen mitjançant taules. D'altres relacions no emmagatzemen dades, sinó que es calculen aplicant operacions (relacionals) sobre relacions base. Són les anomenades "relacions derivades". En la implementació, se solen anomenar "vistes" o "consultes" (*views*, *queries*). Tipus de relacions entre entitats: * Relació un a un (1:1). Per exemple, el director d'un departament * Relació un a molts (1:n). Per exemple, els professors d'un departament * Relació molts a molts (n:m). Per exemple, els cursos als que s'han matriculat els estudiants. S'implementen com una nova taula amb claus foranes. .. figure:: exemple_taules.svg :width: 100 % Taules i registres de la base de dades de l'exemple anterior Dominis i restriccions ---------------------- El **domini** és el conjunt de possibles valors d'un camp. Normalment és d'un tipus conegut, com ara un string, un enter o una imatge. Una **restricció** és una condició sobre els valors de les dades emmagatzemades. Habitualment s'expressen com un predicat, una condició booleana. Les dues restriccions principals del model relacional són la integritat de les entitats i la integritat de les referències. La **integritat de les entitats** consisteix en assegurar que cada valor d'una clau primària és únic i no nul. Així, cada registre ha de representar una única instància del tipus d'entitat modelitzat per la taula/entitat. La **integritat de les referències** consisteix en assegurar que els valors dels atributs que són claus foranes d'una entitat han de ser de claus primàries vàlides de l'entitat a la qual fan referència. De vegades també s'hi admeten valors nuls. En altres paraules, tot valor d'una clau forana ha de fer referència a una clau primària existent a la taula de referència. A part d'aquestes dues, el model relacional admet altres restriccions, com ara els valors dels atributs. Per exemple, una restricció pot limitar els valors d'un atribut enter entre 1 i 10. D'altres restriccions poden referir-se a més d'un atribut, limitant-ne les combinacions possibles, o a tota una relació sencera.