Professional Documents
Culture Documents
Apunts DDL Valencià
Apunts DDL Valencià
Apunts DDL Valencià
Contingut
1. INTRODUCCIÓ ...................................................................................................................... 1
2. MOTORS D'EMMAGATZEMATGE EN MySQL .............................................................. 2
3. EL LLENGUATGE SQL ....................................................................................................... 3
3.1. Història ............................................................................................................................ 3
3.2. Procés d'execució de sentència SQL...................................................................... 4
4. LLENGUATGE DE DEFINICIÓ DE DADES: DDL........................................................... 4
4.1. Tipus de dades .............................................................................................................. 4
4.1.1 Tipus de Data........................................................................................................... 4
4.1.2. Tipus numèrics ...................................................................................................... 5
4.1.3 Tipus de cadena...................................................................................................... 5
4.2 Creació d’una Base de Dades .................................................................................... 6
4.3. Creació, Modificació i Eliminació de taules........................................................... 7
4.3.1. Creació de Taules.................................................................................................. 7
4.3.2. Eliminació de Taules .......................................................................................... 14
4.3.3. Modificació de Taules ........................................................................................ 14
4.4. Creació, Modificació i Eliminació de vistes ......................................................... 18
4.4.1. Creació de Vistes ................................................................................................ 18
4.4.2. Eliminació de Vistes ........................................................................................... 19
5. EL DICCIONARI DE DADES ......................................................................................... 19
5.1 Ordre DESCRIBE ......................................................................................................... 19
1. INTRODUCCIÓ
També vam veure cómo fer el model lògic mitjançant el model relacional que s'obtenia a partir
del model E/R i vam aprendre a comprovar que aquest model estava normalitzat.
Seguint amb el procés de desenvolupament, el que hem de fer ara és passar al disseny físic de
la BD. És a dir, implementar la Base de dades. Per a això, es programaran les diferents taules
que constituiran la Base de dades. Tot això es farà programant en el llenguatge més estés per a
la definició i manipulació de dades en SGBDR: SQL.
2. MOTORS D'EMMAGATZEMATGE EN MySQL
Per defecte, MySQL a partir de la versió 5.5.5 crea les taules de tipus InnoDB, que és un sistema
transaccional, és a dir, que suporta les característiques que fan que una base de dades puga
garantir que les dades es mantindran consistents.
Les propietats que garanteixen els sistemes transaccionals són les característiques anomenades
ACID. ACID és l'acrònim anglés d'atomicity , consistency, isolation, Durability:
Aïllament (o aïllament): cada transacció dins del sistema s'ha d'executar com si fora l'única que
s'executa en aqueix moment.
Només el motor InnoDB permet crear un sistema transaccional en MySQL. Els altres tipus
d'emmagatzematge no són transaccionals i no ofereixen control d'integritat en les bases de dades
creades.
MyISAM: era el sistema per defecte abans de la versió 5.5.5 de MySQL. S'utilitza molt en
aplicacions web i en aplicacions de magatzem de dades (datawarehousing).
Memory: aquest sistema emmagatzema tot en memòria RAM i, per tant, s'utilitza per a sistemes
que requerisquen un accés molt ràpid a les dades.
Merge: agrupa taules de tipus MyISAM per a optimitzar llistes i cerques. Les taules que cal
agrupar han de ser similars, és a dir, han de tindre el mateix número i tipus de columnes.
Per a obtindre una llista dels motors d'emmagatzematge suportats per la versió MySQL que tinga
instal·lada, el comando SHOW ENGINES.
3. EL LLENGUATGE SQL
3.1. Història
El naixement del llenguatge SQL data de 1970 quan E. F. Codd publica el seu llibre: «Un model
de dades relacional per a grans bancs de dades compartides». Aqueix llibre dictaria les direcrices
de les bases de dades relacionals. A penes dos anys després IBM (per a qui treballava Codd)
utilitza les directrius de Codd per a crear l'Standard English Query Language (Llenguatge
Estàndard Anglés per a Consultes) al qual se'n va dir SEQUEL. Més endavant se li van assignar
les sigles SQL (Standard Query Language, llenguatge estàndard de consulta) encara que en
anglés es continuen pronunciant secuel. En espanyol es pronuncia esecuele.
En 1979 Oracle presenta la primera implementació comercial del llenguatge. Poc després es
convertia en un estàndard en el món de les bases de dades avalat pels organismes ISO i ANSI.
L'any 1986 es pren com a llenguatge estàndard per ANSI dels SGBD relacionals. Un any després
l'adopta ISO, la qual cosa converteix a SQL en estàndard mundial com a llenguatge de bases de
dades relacionals.
En 1989 apareix l'estàndard ISO (i ANSI) anomenat SQL89 o SQL1. En 1992 apareix la nova
versió estàndard de SQL (hui dia continua sent la més coneguda) anomenada SQL92. En 1999
s'aprova un nou SQL estàndard que incorpora millores que inclouen triggers, procediments,
funcions,… i altres característiques de les bases de dades objecte-relacionals; aquest estàndard
es coneix com SQL99. L'últim estàndard és el de l'any 2011 (SQL2011) Elements de SQL
Llenguatge de Control de Dades (DCL): permet establir drets d'accés dels usuaris
sobre els diferents objectes de la base de dades. Ho formen les instruccions GRANT i
REVOKE.
Oracle contempla a més sentències per a transaccions. Administren les modificacions
creades per les instruccions DML. Ho formen les instruccions ROLLBACK, COMMIT i
SAVEPOINT.
Els tipus de dades que pot haver-hi en un camp, es poden agrupar en tres grans grups:
Tipus de Data
Tipus numèrics
Tipus de Cadena
Pots buscar informació sobre els tipus es dades i les seues característiques en MySQL 5.0
Reference Manual (Capítol 11)
DATE 3 bytes
DATETIME 8 bytes
TIMESTAMP 4 bytes
TIME 3 bytes
YEAR 1 byte
4.1.2. Tipus numèrics
TINYINT 1 byte
SMALLINT 2 bytes
MEDIUMINT 3 bytes
INT 4 bytes
INTEGER 4 bytes
BIGINT 8 bytes
FLOAT(X) 4 ú 8 bytes
FLOAT 4 bytes
DOUBLE 8 bytes
REAL 8 bytes
Una columna pot tindre l'atribut addicional AUTO_INCREMENT (si el tipus es un INT). Quan
introduïm un valor de NULL (recomanat) o 0 en una columna AUTO_INCREMENT
(autoindexada), la columna s'assigna al següent valor de seqüència. Típicament això és value+1,
on value és el major valor possible per a la columna en la taula. Seqüències AUTO_INCREMENT
comencen amb 1. Per exemple:
CHAR(n) n bytes
VARCHAR(n) n +1 bytes
MySQL permet crear diferents bases de dades en un mateix servidor (també es poden denominar
Schemas. Vegem com es crea una BD en MySQL.
[especificació_create [, especificació_create] …]
Quan es poden triar un element entre diversos aquests van entre claus { } i separats per un
pipe |.
D'altra banda, els elements que van entre claudàtors [] són opcionals, poden anar o no, per
exemple és opcional posar IF NOT EXIST, és a dir: que cree la base de dades si no existeix
ja. Finalment, pots observar l'especificació del conjunt de caràcters a utilitzar o bé la manera
de tractar aqueix conjunt de caràcters. Encara que, com s'ha dit, no és necessari i normalment
no especificarem aquests paràmetres
Per exemple, si utilitzem CHARACTER SET utf8, estem dient que s'empre utf8 per a
emmagatzemar els caràcters. Si indiquem COLLATE uft8_spanish_ci vol dir que s'utilitzarà
l'alfabet espanyol per a les ordenacions i les comparacions en la nostra base de dades. Això és
important perquè en ordenar alfabèticament la ñ i les lletres accentuades vagen en el seu lloc i
perquè en comparar dades accentuades i altres no accentuats siguen considerats iguals (é és
igual a e) .
Si intentem crear de nou la mateixa base de dades es produirà un error. Ens indica que no s'ha
pogut crear la base de dades perquè ja existeix.
Si volem evitar aquest error hem d'emprar la clàusula opcional IF NOT EXISTS.
En aquest cas l'execució ha sigut correcta i ens mostra un avís (1 warning) indicant que no s'ha
creat la base de dades.
Cada vegada que tinguem una BD des del punt de vista lògic (simplificant: una sèrie de taules
relacionades entre si) crearem un SCHEMA per a agrupar-les. Així, tots els objectes de BD que
pertanyen a una mateixa BD lògica han d'estar en el mateix SCHEMA.
En aquest apartat veurem els comandos SQL que s'utilitzaran per a crear i modificar la definició
d'una taula, així com per a eliminar-la de la base de dades.
Ens referirem al sistema MySQL; podent haver-hi diferències respecte a altres SGBD.
No pot haver-hi dues taules amb el mateix nom per al mateix usuari (poden coincidir els
noms si estan en diferents esquemes)
...
[ restriccions de taula ]
);
Per a realitzar les separacions s'utilitza la coma. L'última línia, abans del parèntesi de
tancament, no porta coma.
Nota: La clàusula CHECK s'analitza pero s'ignora en tots els motors d'emmagatzematge MySql.
[CONSTRAINT [nom_restricció]] {
| CHECK (condició)}
Obligatòriament hem de crear una restricció de taula quan una mateixa restricció afecte
diverses columnes. Per exemple, si tenim una clau primària composta per diversos camps, hem
d'establir una restricció de taula, no de columna.
El significat de les diferents opcions que apareixen en la sintaxi CREATE TABLE és:
PRIMARY KEY: estableix aqueix atribut o conjunt d'atributs com la clau primària de la
taula. Aquesta restricció ja implica les restriccions UNIQUE i NOT NULL.
UNIQUE: impedeix que s'introduïsquen valors repetits per a aqueix atribut o conjunt
d'atributs. No es pot utilitzar juntament amb PRIMARY KEY. S'utilitza per a claus
alternatives.
NOT NULL: evita que s'introduïsquen files en la taula amb valor NULL per a aqueix
atribut. No s'utilitza amb PRIMARY KEY.
DEFAULT valor_per_defecte: permet assignar un valor per defecte al camp que s'està
definint. El valor no pot ser el retornat per una funció. Per exemple, no seria
correcte:
incorrecte
CHECK (condició): permet establir condicions que han de complir els valors de la taula
que s'introduiran en aquesta columna.
Nota: La clàusula CHECK s'analitza pero s'ignora en tots els motors d'emmagatzematge
FOREIGN KEY: defineix una clau externa (aliena) de la taula respecte d'una altra taula.
Aquesta restricció especifica una columna o una llista de columnes com a clau externa
d'una taula referenciada. No es pot definir una restricció d'integritat referencial que
es refereix a una taula abans que aquesta taula haja sigut creada. És important
ressaltar que una clau externa ha de referenciar a una clau primària completa de la taula
pare, i mai a un subconjunt dels atributs que formen aquesta clau primària.
Quan definim una clau aliena, podem definir una política d'Esborrat i una de Modificació.
És a dir, podem definir què passarà amb els valors de les columnes que conformen la
clau aliena en cas que la fila a la qual referencien en la taula pare siga eliminada o es
modifique el seu valor en la Clau Primària. Per exemple:
En la taula LIBRO hi ha definida una Clau Aliena cap a la taula AUTOR. Què passa amb
'LIB-000016', 'LIB-000017' i 'LIB-000008' si s'esborra en la taula AUTOR a 'GAGA'?
Nota
El valor predeterminat és que les files de la taula principal no es poden eliminar si existeix una
fila en la taula secundària que es refereix a aquesta fila principal, si no indiquem ON DELETE
CASCADE o ON DELETE SET NULL. L'estàndard SQL defineix moltes més opcions.
L'estàndard SQL defineix 5 opcions per a manejar aquesta situació de taules principal/secundària
de diverses maneres. Aquestes opcions són:
ON DELETE CASCADE: si s'elimina una fila de la taula principal, s'eliminen totes les
files coincidents en la taula secundària.
ON DELETE SET NULL: si s'elimina una fila de la taula principal, totes les columnes de
referència en totes les files coincidents de la taula secundària s'estableixen en NULL.
ON DELETE SET DEFAULT: si s'elimina una fila de la taula principal, totes les columnes
de referència en totes les files coincidents de la taula secundària es configuren en el
valor predeterminat de la columna.
ON DELETE RESTRICT: està prohibit eliminar una fila de la taula principal si aqueixa
fila té alguna fila coincident en la taula secundària. El punt en el temps quan realitza la
comprovació es pot ajornar fins que es realitze COMMIT.
Anàloga a l'opció ON DELETE hi ha una opció ON UPDATE. Defineix les mateixes 5 opcions per
al cas de canviar una columna en la taula principal a la qual fa referència la columna d'una taula
secundària.
ON UPDATE RESTRICT: està prohibit canviar una fila de la taula principal si aqueixa
fila té files coincidents en la taula secundària. El punt en el temps quan es realitza la
comprovació es pot ajornar fins que es realitze COMMIT.
En la definició d'una taula poden aparéixer diverses clàusules FOREIGN KEY, tantes com claus
externes tinga la taula. No obstant això, només pot existir una clau primària, si bé aquesta clau
primària pot estar formada per diversos atributs.
Exemples:
);
En el cas que vulguem assignar un nom a les restriccions haurem de definir-les després de definir
els camps. Així, si desitgem modificar posteriorment el disseny de la taula, serà més fàcil
gestionar les restriccions.
...
Exemple:
matricula VARCHAR(8),
color VARCHAR(15),
codTaller VARCHAR(10),
codProp VARCHAR(10),
REFERENCES TALLER(codTaller)
REFERENCES PROPIETARI(codProp)
CONSTRAINT cotxes_color_ck1
);
En l'exemple, les directrius d'esborrat i modificació definides sobre les 2 claus alienes
determinarien que:
Si s'ESBORRARA en la taula TALLER una fila, les files de la taula COTXES relacionades amb
aquesta passarien a tindre en el seu camp CodTaller el valor NULL.
La sentència en SQL per a eliminar taules és DROP TABLE. La seua sintaxi és:
[ CASCADE|RESTRICT];
RESTRICT i CASCADE es permeten per a fer la portabilitat més fàcil. De moment, no fan res.
L'esborrat d'una taula és irreversible i no hi ha cap petició de confirmació, per la qual cosa
convé ser molt acurat amb aquesta operació. En esborrar una taula s'esborren totes les dades
que conté.
Exemples:
S'eliminarà la taula COTXES, sempre que que se puga: no ho impedisquen les regles d'integritat.
Per exemple: no siga COTXE una taula cap a la qual hi ha dirigides Claus Alienes en altres taules.
Exemple:
L'ordre TRUNCATE TABLE seguida del nom d'una taula, fa que s'elimine el contingut de la taula,
però no la taula en si. Fins i tot esborra de l'arxiu de dades l'espai ocupat per la taula. (Aquesta
ordre no pot anul·lar-se amb un ROLLBACK)
Exemple:
La clàusula ALTER TABLE permet fer canvis en l'estructura d'una taula: afegir columna, esborrar
columna, modificar columna.
Afegir Columnes
... ]
);
Permet afegir noves columnes a la taula. S'han d'indicar el seu tipus de dades i les seues
propietats si és necessari (a l'estil de CREATE TABLE). Les noves columnes s'afigen al final, no
es pot indicar una altra posició.
Exemples:
fechaMatric Date,
);
Esborrar Columnes
Elimina la columna indicada de manera irreversible i incloent les dades que contenia. No es
poden eliminar totes les columnes, per a l'última columna caldrà usar DROP TABLE.
Exemple:
Esborra la columna “tipoFaros” de la taula VEHICULOS i les dades que continguera de manera
irreversible.
Modificar columnes
);
Exemple:
Només es pot reduir l'amplària màxima d'un camp si aqueixa columna posseeix nuls en
tots els registres, o no hi ha registres.
Afegir Restriccions
Sabem que una restricció és una condició d'obligat compliment per a una o més columnes de la
taula. A cada restricció se li posa un nom, en el cas de no posar un nom (en les quals això siga
possible) llavors el propi li col·loca el nom que és un mnemotècnic amb el nom de taula, columna
i tipus de restricció.
Hem vist que es poden afegir en crear la taula, o bé, podem fer-ho mitjançant modificació
posterior de la taula.
També es pot modificar una restricció creada en . La seua sintaxi general és:
Esborrar Restriccions
Si el que volem és redefinir (modificar) una restricció, el que hem de fer és:
Una vista no és més que una consulta emmagatzemada a fi d'utilitzar-la tantes vegades com es
desitge. Una vista no conté dades sinó la instrucció SELECT necessària per a crear la vista, això
assegura que les dades siguen coherents en utilitzar les dades emmagatzemades en les taules.
Simples. Les formen una sola taula i no contenen funcions d'agrupació. El seu
avantatge és que permeten sempre realitzar operacions DML sobre elles.
Sintaxi:
AS SELECT ...
àlies. Llista d'àlies que s'estableixen per a les columnes retornades per la consulta
SELECT en la qual es basa aquesta vista. El número d'àlies ha de coincidir amb el
nombre de columnes retornades per SELECT. La sentència SELECT la tractarem en
profunditat en el tema següent.
El que té de bo les vistes és que després de la seua creació s'utilitzen com si foren una taula.
La vista USER_VIEWS del diccionari de dades permet mostrar una llista de totes les vistes que
posseeix l'usuari actual. La columna TEXT d'aqueixa vista conté la sentència SQL que es va
utilitzar per a crear la vista (sentència que és executada cada vegada que s'invoca a la vista).
5. EL DICCIONARI DE DADES
El diccionari de dades és el lloc on es deposita informació sobre totes les dades que formen la
BD: METADADES. És una guia en la qual es descriu la BD i els objectes que la formen. És un
element imprescindible en tot SGBD El diccionari conté les característiques lògiques dels llocs
on s'emmagatzemen les dades del sistema, incloent-hi nom, descripció, àlies, contingut i
organització. Identifica els processos on s'empren les dades i els llocs on es necessita l'accés
immediat a la informació.
El Diccionari de Dades (o catàleg de metadades). és una de les parts més importants d'un SGBD
El diccionari de dades proporciona informació al DBA i el propi sistema de totes les bases de
dades i taules emmagatzemades. La informació que proporciona el diccionari de dades pot ser
des de l'estructura de les taules fins a privilegis dels usuari o estat del consum dels recursos.
Cada SGBD organitza el seu propi catàleg amb diferents estructures i MySQL disposa d'una
base de dades especial anomenada information schema on s'emmagatzema la definició de les
taules, vistes, índexs, estat del SGBD i una altra anomenada mysql on emmagatzemen els
usuaris i privilegis.
Exemple:
DESCRIBE Jardineria.Productos;
Apareixen els camps de la taula ‘Productos’. Aquesta instrucció no es part del SQL estàndar,
però quasi és considerada així ja que pràcticament tots els SGBD la utilitzen.