Contenidos
Lenguaje de definición de datos (LDD)
El lenguaje de definición de datos (LDD), es el que se encarga de la modificación de la estructura de los objetos de la base de datos
Incluye órdenes para modificar, borrar o definir las relaciones (tablas) en las que se almacenan los datos de la base de datos
Existen cuatro operaciones básicas:
Definición de los datos
El conjunto de relaciones de cada base de datos debe especificarse en el sistema en términos de un lenguaje de definición de datos (LDD)
El LDD de SQL no sólo permite la especificación de un conjunto de relaciones, sino también de la información relativa a esas relaciones, incluyendo:
- El esquema de cada relación
- El dominio de valores asociado a cada atributo
- Las restricciones de integridad
- El conjunto de índices que se deben mantener para cada relación
- La información de seguridad y de autorización de cada relación
- La estructura de almacenamiento físico de cada relación en el disco
Tipos básicos de dominios
La norma SQL soporta gran variedad de tipos de dominio predefinidos:
- CHAR(n)
Una cadena de caracteres de longitud fija, con una longitud n especificada por el usuario. También se puede utilizar la palabra completa character
- VARCHAR(n)
Una cadena de caracteres de longitud variable con una longitud máxima n especificada por el usuario. La forma completa, character varying, es equivalente
- INT
Un entero (un subconjunto finito de los enteros dependiente del ordenador). La palabra completa, integer, es equivalente
- SMALLINT
Un entero pequeño (un subconjunto dependiente del ordenador del tipo de dominio entero)
- NUMERIC(p, d)
Un número en coma fija, cuya precisión la especifica el usuario. El número está formado por p dígitos (más el signo) y de esos p dígitos, d pertenece a la parte decimal
- DOUBLE
Un número en coma flotante y números en coma flotante de doble precisión, con precisión dependiente del ordenador
- FLOAT(n)
Un número en coma flotante cuya precisión es, al menos, de n dígitos
- DATE
Dato de tipo fecha, con una precisión de hasta segundo
Definición básica de esquemas
CREATE TABLE
Las relaciones se definen mediante el comando CREATE TABLE:
\text{CREATE TABLE r} (\\ A_1 D_1, \cdots, A_n D_n,\\ \{rest-integridad_1\}, \cdots, \{rest-integridad_k\} )
Donde r es el nombre de relación, cada Ai es el nombre de un atributo del esquema de la relación r y Di es el tipo de dominio de los valores del dominio del atributo Ai
Hay varias restricciónes de integridad válidas
Una de las más usadas es la de clave primaria (primary key), que adopta la siguiente forma:
\text{primary key}(A_{j1}, \cdots, A_{jm})
La especificación de clave primaria determina los atributos A_{j1}, \cdots, A_{jm} forman la clave primaria de la relación
Los atributos de la clave primaria tienen que ser no nulos y únicos; es decir, ninguna tupla puede tener un valor nulo para un atributo de la clave primaria y ningún par de tuplas de la relación puede ser igual en todos los atributos de la clave primaria
Aunque la especificación de clave primaria es opcional, suele ser una buena idea especificar una clave primaria para cada relación
En el ejemplo se ha creado una relación llamada cuenta en la cual se han definido los atributos:
numero_cuenta, que puede guardar una palabra de hasta 10 carácteres
nombre_sucursal, que puede guardar una palabra de hasta 15 carácteres
saldo, que puede guardar un número decimal con 12 enteros y 2 decimales
Y con la restricción sobre numero_cuenta como clave primaria de la relación
Si una tupla recién insertada o recién modificada de una relación contiene valores nulos para cualquiera de los atributos que forman parte de la clave primaria, o si tienen el mismo valor que otra tupla de la relación, SQL notificará el error e impedirá la actualización
En el ejemplo se ha creado otra relación llamada cliente en la cual se han definido los atributos:
numero_cuenta, que puede guardar una palabra de hasta 10 carácteres
nombre_cliente, que puede guardar una palabra de hasta 15 carácteres
Y con la restricción sobre numero_cuenta como clave primaria de la relación
Como puede verse podemos crear más de una relación
DROP TABLE
Para eliminar una relación de la base de datos se utiliza el comando DROP TABLE
Este comando elimina de la base de datos toda la información sobre la relación
En el ejemplo se ha elimina de la base de datos toda la información sobre la relación cuenta
Este comando es más drástico que DELETE, que sólo borra sus tuplas manteniendo el esquema de la relación
Sin embargo, DROP, si se elimina cuenta, no se podrá volver a insertar ninguna tupla en dicha relación, a menos que se vuelva a crear con el comando CREATE TABLE
ALTER TABLE
El comando ALTER TABLE se utiliza para añadir atributos a una relación existente
Como valor del nuevo atributo se asigná a todas las tuplas de la relación el valor nulo
En el ejemplo se ha añadido un nuevo atributo
Donde cuenta es el nombre de la relación existente, ano es el nombre del atributo que se desea añadir y DATETIME es el dominio del atributo añadido
También se pueden eliminar atributos usando ALTER TABLE
En el ejemplo se ha eliminado el atributo que añadimos antes
Donde cuenta es el nombre de la relación existente y ano es el nombre del atributo que se desea eliminar
En este caso no es necesario declarar el dominio del atributo a borrar
Muchos sistemas de bases de datos no permiten el borrado de atributos, aunque sí que permiten el borrado de tablas completas
TRUNCATE
Este comando solo se aplica a tablas y su función es borrar el contenido completo de la relación especificada
La ventaja sobre el comando DELETE, es que si se quiere borrar todo el contenido de la relación, es mucho más rápido, especialmente si la relación es muy grande
La desventaja es que TRUNCATE sólo sirve cuando se quiere eliminar absolutamente todas las tuplas, ya que no se permite la cláusula WHERE
Si bien, en un principio, esta sentencia parecería ser LMD (Lenguaje de Manipulación de Datos), es en realidad una LDD, ya que internamente, el comando TRUNCATE borra la tabla y la vuelve a crear y no ejecuta ninguna transacción
En el ejemplo hemos borrado todo el contenido de la relación llamada cuenta