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).
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 |
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
.
És possible revisar la definició d’una taula amb la instrucció DESCRIBE
:
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):
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ó:
É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
.