# Base de dades relacional

Una base de dades relacional és una base de dades que compleix amb el model relacional, que és el model més utilitzat en l'actualitat per a modelar problemes reals i administrar dades dinàmicament. Permeten establir interconnexions (relacions) entre les dades (que estan guardades en taules), i treballar-hi conjuntament. Després de postular-ne les bases en 1970 (ho va fer Edgar Frank Codd, dels laboratoris IBM a San José (Califòrnia)), no va tardar a consolidar-se com un nou paradigma en els models de base de dades.

## Característiques

* Una base de dades relacional es compon de diverses taules o relacions.
* No pot haver-hi dues taules amb el mateix nom.
* Cada taula és al seu torn un conjunt de registres, files o tuples.

## Elements
### Relacions base i derivades

En una base de dades relacional, totes les dades s'emmagatzemen i s'accedeixen a ells per mitjà de relacions. Les relacions que emmagatzemen dades són dites "relacions base" i la seua implementació és cridada "taula". Altres relacions no emmagatzemen dades, però que són calculades a l'aplicar operacions relacionals. Aquestes relacions són cridades "relacions derivades" i la seua implementació és cridada "vista" o "consulta". Les relacions derivades són convenients, ja que expressen informació de diverses relacions actuant com si anara una sola.

### Restriccions

Una restricció és una condició que obliga el compliment de certes condicions en la base de dades. Algunes no són determinades pels usuaris, sinó que són inherentment definides pel simple fet que la base de dades sigui relacional. Algunes altres restriccions les pot definir l'usuari, per exemple, usar un camp amb valors sencers entre 1 i 10.
Les restriccions proveeixen un mètode d'implementar regles en la base de dades. Les restriccions restringeixen les dades que poden ser emmagatzemats en les taules. Usualment es defineixen usant expressions que donen com a resultat un valor booleà, indicant si les dades satisfan la restricció o no.
Les restriccions no són part formal del model relacional, però són incloses perquè juguen el rol d'organitzar millor les dades. Les restriccions són molt discutides juntament amb els conceptes relacionals.

### Dominis

Un domini descriu un conjunt de possibles valors per a cert atribut. Com un domini restringeix els valors de l'atribut, pot ser considerat com una restricció. Matemàticament, atribuir un domini a un atribut significa "tots els valors d'aquest atribut deuen ser elements del conjunt especificat".
Distints tipus de dominis són: enters, cadenes de text, data, etc.

### Clau única

Cada taula pot tenir un o més camps els valors dels quals identifiquen de forma única cada registre d'aquesta taula, és a dir, no poden existir dues o més registres diferents els valors dels quals en aquests camps siguen idèntics. Aquest conjunt de camps es diu clau única.
Poden existir diverses claus úniques en una determinada taula, i a cadascuna d'aquestes sol cridar-se-li candidata a clau primària.

### Clau primària

Una clau primària és una clau única triada entre totes les candidates que defineix unívocament a tots els restants atributs de la taula, per a especificar les dades que seran relacionats amb les altres taules. La forma de fer això és per mitjà de claus foranes.
Només pot existir una clau primària per taula i cap camp d'aquesta clau pot contenir valors NULL.

### Clau forana

Una clau forana és una referència a una clau en altra taula. Les claus foranes no necessiten ser claus úniques en la taula on estan i si on estan referenciades.
Per exemple, el codi de departament pot ser una clau forana en la taula d'empleats. Òbviament es permet que hi hagi diversos treballadors en un mateix departament, però existirà només un departament amb aquest codi.

## Clau índex

Les claus índex sorgeixen amb la necessitat de tenir un accés més ràpid a les dades. Els índexs poden ser creats amb qualsevol combinació de camps d'una taula. Les consultes que filtren registres per mitjà d'aquests camps, poden trobar els registres de forma no seqüencial usant la clau índex.
Les bases de dades relacionals inclouen múltiples tècniques d'ordenament, cadascuna d'elles és òptima per a certa distribució de dades i grandària de la relació.
Els índexs generalment no es consideren part de la base de dades, perquè són un detall agregat. No obstant això, les claus índexs són desenvolupades pel mateix grup de programadors que les altres parts de la base de dades.

### Procediments emmagatzemats

Un procediment emmagatzemat és codi executable que s'associa i s'emmagatzema amb la base de dades. Els procediments emmagatzemats usualment agafen i personalitzen operacions comunes, com inserir un registre dins d'una taula, recopilar informació estadística, o encapsular càlculs complexos. Són freqüentment usats per un API per seguretat o simplicitat.
Els procediments emmagatzemats no són part del model relacional, però totes les implementacions comercials els inclouen.

## Estructura

La base de dades s'organitza en dues seccions marcades: l'esquema i les dades (o instància).
L'esquema és la definició de l'estructura de la base de dades i principalment emmagatzema les següents dades:
* El nom de cada taula
* El nom de cada camp
* El tipus de dada de cada camp
* La taula a la qual pertany cada camp
Les bases de dades relacionals passen per un procés que es coneix com a normalització, el resultat d'aquest procés és un esquema que permet que la base de dades es pugui utilitzar de manera òptima.
Les dades o la instància és el contingut de la base de dades en un moment donat. És en sí, el contingut de tots els registres.

## Manipulació de la informació

Per a manipular la informació utilitzem un llenguatge relacional, actualment es compta amb dos llenguatges formals l'àlgebra relacional i el càlcul relacional. L'àlgebra relacional permet descriure la forma de fer una consulta, en canvi, el càlcul relacional només indica el que es desitja retornar.
El llenguatge més comú per a construir les consultes a bases de dades relacionals és SQL (Structured Query Language), un estàndard implementat pels principals motors o sistemes de gestió de bases de dades relacionals.
En el model relacional els atributs han d'estar explícitament relacionats a un nom en totes les operacions, en canvi, l'estàndard SQL permet usar columnes sense nom en conjunts de resultats, com l'asterisc taquigràfic (* ) com anotació de consultes.
AL contrari del model relacional, l'estàndard SQL requereix que les columnes tinguen un ordre definit, la qual cosa és fàcil d'implementar en una computadora, ja que la memòria és lineal.
És de notar, no obstant això, que en SQL l'ordre de les columnes i els registres retornats en cert conjunt de resultat mai està garantit, llevat que explícitament siga especificat per l'usuari.

## Manegadors de base de dades relacionals

Existeix programari exclusivament dedicat a tractar amb bases de dades relacionals. Aquest programari es coneix com a SGBD (Sistema de gestió de base de dades relacional) o RDBMS (de l'anglès Relational database management system).
Entre els gestors o manegadors més actuals i populars trobem: MySQL, PostgreSQL, Oracle, DB2 i Microsoft SQL Server.

## Avantatges i desavantatges

Avantatges
* Proveeix eines que garanteixen evitar la duplicitat de registres.
* Garanteix la integritat referencial, així, a l'eliminar un registre elimina tots els registres relacionats dependents.
* Afavoreix la normalització per ser més comprensible i aplicable.
Desavantatges
* Presenten deficiències amb dades gràfiques, multimèdia, CAD i sistemes d'informació geogràfica.
* No es manipulen de forma manejable els blocs de text com tipus de dada.
Les bases de dades orientades a objectes (BDOO) es van proposar amb l'objectiu de satisfer les necessitats de les aplicacions anteriors i així, complementar però no substituir les bases de dades relacionals.

## Vegeu també

* Base de dades
* Model relacional
* Model entitat-relació
* Base de dades orientada a objectes

## Referències

* ↑ Communications of the ACM, volume=13, issue=6, pages=377-387 Arxivat 2007-06-12 a Wayback Machine. (anglès)

## Enllaços externs

* Article sobre Base de dades relacional (castellà)
* Blog sobre base de dades Oracle i alta disponibilitat (castellà)