1. Bases de dades relacionals

1.5. Creació de taules i restriccions

Una base de dades està formada per un conjunt de taules que ens permetran estructurar la informació que percebem en un escenari concret del món real. Cada taula emmagatzemarà en forma de registres la sèrie d’exemples de cada classe d’entitats o relacions entre entitats especificades prèviament. Per crear una taula de registres buida amb l’ordre CREATE TABLE cal primer declarar els seus atributs (consulteu la figura 17).

Figura 17. Sintaxi de l’ordre CREATE TABLE.
Els elements opcionals es mostren entre claudàtors.
Font: elaboració pròpia.

A l’hora de definir la classe d’informació que emmagatzemarem en cada atribut, MySQL proporciona una gran varietat de tipus numèrics i alfanumèrics bàsics (taula 2). L’espai de memòria requerit per emmagatzemar cada variable depèn de la precisió especificada en cada cas. Els tipus DATE i TIME resulten especialment útils per portar el registre de les nostres activitats en el temps. L’usuari pot declarar, a més, variables del tipus objecte (en anglès, Binary Large Objects o BLOB) per emmagatzemar fitxers de text, documents en format PDF o fins i tot imatges dins d’alguna taula de la base de dades.

Taula 2. Tipus de dades en MySQL.

 Tipus genèric  Tipus MySQL
 Sencer TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
 Decimal DECIMAL, FLOAT, DOUBLE/REAL
 Text CHAR, VARCHAR, TINYTEXT, TEXT
 Objectes BLOB, MEDIUMBLOB, LONGBLOB
 Temps DATE, TIME

Font: elaboració pròpia.

Juntament amb la declaració dels atributs, per crear una taula hem d’especificar quin atribut o combinació d’atributs serà la clau primària, identificant de forma unívoca cada instància (figura 18). En cas d’existir, les claus foranes per referenciar els atributs d’altres taules també s’han d’indicar explícitament.

El dissenyador pot activar dos controls interns sobre el valor d’un atribut en el moment de registrar noves instàncies a la base de dades. En primer lloc, és possible rebutjar aquells registres que no posseeixin un valor definit per a un atribut concret. Aquesta circumstància s’especifica amb la construcció NOT NULL, just després de la declaració de tipus. NOT NULL seria una restricció de camp obligatori, no accepta valors nuls. En cas contrari, el sistema assignarà per defecte el valor NULL a aquest camp i acceptarà valors nuls. Aquest requeriment s’ha de satisfer inexcusablement en aquells atributs que pertanyen a la clau primària. En segon lloc, per als identificadors numèrics associats a cada instància, el propi sistema pot encarregar-se de gestionar un comptador automàtic de valors mitjançant la construcció AUTO_INCREMENT.

Tornant novament a la nostra base de dades cataleg (figura 16), ens trobem ara en disposició de crear les taules del catàleg de gens especificades formalment a les figures 18, 19, 20 i 21. Hem d’escollir adequadament els tipus de dades per a cada atribut o camp, segons el seu contingut, definint clarament quines són les claus primàries i foranes. L’usuari pot començar creant les taules més elementals, és a dir, aquelles que no posseeixen claus foranes (genomes i funcions). Observeu com declarem la clau primària i ens assegurem que cap instància pot donar-se d’alta a la base de dades amb un valor nul per a les claus primàries, espècie i funció. Per verificar que el procés de creació ha funcionat correctament, l’usuari pot consultar la base de dades sobre les taules existents amb l’ordre SHOW TABLES.

Figura 18. Crear les taules genomes i funcions en la nostra base de dades cataleg.
Font: elaboració pròpia.

És possible revisar la definició d’una taula amb la instrucció DESCRIBE:

Figura 19. Mostra de la descripció d’una taula del nostre catàleg.
Font: elaboració pròpia.

A continuació, per crear la taula gens, a més de la clau primària, indiquem un camp o atribut que és la clau forana (que ha d’apuntar o fer referència a la clau primària de la taula genomes):

Figura 20. Creació de la taula gens a la nostra base de dades.
Font: elaboració pròpia.

Finalment, creem la taula anotacions per relacionar els gens amb les anotacions funcionals. Juntament amb els dos valors que identifiquen cada registre (gen i funció), afegirem un atribut per registrar l’origen de la informació:

Figura 21. Creació de la taula anotacions a la nostra base de dades cataleg.
Els dos components de la clau primària de la taula anotacions s’han de declarar com a claus foranes amb origen en les taules gens i funcions.
Font: elaboració pròpia.

És possible definir altres restriccions als camps de les taules amb l’ordre CHECK.

Per exemple, podem indicar que un camp numèric com el camp inci de la taula gens que és tipus numèric només accepti valors positius CHECK (inici >0), o que un camp de tipus cadena de caràcters només accepti determinats valors; per exemple, perquè el camp hebra de la taula gens només accepti els caràcters «+» o «-», podem fer hebra ENUM(‘+’,’-’).

Un cop creada la taula podem modificar-la amb la instrucció ALTER TABLE.

Per exemple, si volem eliminar el camp origen de la taula anotacions escrivim

ALTER TABLE anotacions DROP COLUMN origen;

i si volem tornar a afegir-hi el mateix camp escrivim

ALTER TABLE anotacions ADD origen VARCHAR(20);

Durant el temps de vida d’una base de dades és freqüent que n’haguem d’actualitzar el contingut. En determinats casos, això pot implicar l’eliminació completa d’usuaris, de taules o, fins i tot, de la pròpia base de dades. Per implementar aquests serveis, MySQL posseeix la família d’ordres DROP.

Figura 22. Sintaxi de l’ordre DROP.
Font: elaboració pròpia.