Está en la página 1de 6

Lenguaje de Definicin de Datos

TEMA 6: LENGUAJE DE DEFINICIN DE DATOS (LDD)


6.1

Introduccin

Hasta ahora hemos estudiado las sentencias que forman parte del DML (Data Management
Language) lenguaje de manipulacin de datos, todas esas sentencias sirven para recuperar,
insertar, borrar, modificar los datos almacenados en la base de datos; lo que veremos en este tema
son las sentencias que afectan a la estructura de los datos.
El LDD (Data Definition Language) es la parte del SQL que ms vara de un sistema a otro ya que esa
rea tiene que ver con cmo se organizan internamente los datos y eso, cada sistema lo hace de
una manera u otra.
El LDD de SQL permite la especificacin no slo de un conjunto de relaciones, sino tambin de
alguna informacin relativa a esas relaciones, incluyendo:

El esquema de cada relacin.


El dominio de valores asociado a cada atributo.
Las restricciones de integridad.
El conjunto de ndices que se deben mantener por cada relacin.
Informacin de seguridad y autorizacin para cada relacin.
La estructura de almacenamiento fsico de cada relacin en disco.

El lenguaje de definicin de datos (en ingls Data Definition Language, o DDL), es el que se encarga
de la modificacin de la estructura de los objetos de la base de datos. Existen cuatro operaciones
bsicas: CREATE, ALTER, DROP y TRUNCATE.
6.2

Tipos de dominios en SQL

La norma SQL soporta un conjunto de tipos de dominios predefinidos, que incluye los siguientes:
char(n): Cadenas de caracteres de tamao fijo, con una longitud n especificada por el usuario
de hasta un mximo de 255. Tambin se puede utilizar la palabra completa character.
varchar(n): Es una cadena de caracteres de longitud variable, con una longitud n especificada
por el usuario de hasta un mximo de 2000 caracteres. Tambin se puede utilizar la forma
completa character varying.
int: Es un entero. Tambin se puede utilizar la palabra completa integer.
smallint: Es un entero pequeo (Un subconjunto del dominio de los enteros).
numeric(p,d): Es un nmero en coma flotante, cuya precisin la especifica el usuario. El
nmero est formado por p dgitos y de esos p dgitos d pertenecen a la parte decimal.
real, double precision: Son respectivamente nmeros en coma flotante y nmeros en coma
flotante de doble precisin, con precisin dependiente de la mquina.
float(n): Es un nmero en coma flotante, cuya precisin es de al menos n dgitos.
date: Es una fecha del calendario, que contiene un ao (de cuatro dgitos), un mes y un da del
mes.
time: Es la hora del da, expresada en horas, minutos y segundos.
timestamp: Es una combinacin de date y time. Los valores de fecha y hora se pueden
especificar como:
date 2009-05-11
time 09:30:00

Lenguaje de Definicin de Datos

timestamp: 2009-05-11 09:35:00


raw(Longitud): Representa valores binarios de longitud mxima de 255 bytes.
Long Raw: Igual que el tipo anterior con la diferencia que el tamao mximo es de 2 gigabytes
Rowid: Tipo de dato binario que representa la direccin de una tupla de una tabla.
Ejemplo:
create table Cine (
nombre_cine varchar(15) NOT NULL,
ciudad_cine varchar(15),
direccion_cine varchar(25),
CONSTRAINT pk_cine
PRIMARY KEY (cine),
CONSTRAINT (ck_cin));
6.3

Definicin de esquemas en SQL

6.3.1 Create Table


Un esquema de relacin se define utilizando la orden create table:
create table r (A1D1,A2D2AnDn,
(restriccin_integridad1),
.
restriccin_integridadk))
Donde r es el nombre de la relacin, cada Ai es el nombre de un atributo del esquema de relacin r
y Di es el dominio de los valores del atributo Ai.
Para escribir una sentencia CREATE TABLE se empieza por indicar el nombre de la tabla que
queremos crear y a continuacin entre parntesis indicamos separadas por comas las definiciones
de cada columna de la tabla, la definicin de una columna consta de su nombre, el tipo de dato
que tiene y podemos aadir si queremos una serie de especificaciones que debern cumplir los
datos almacenados en la columna, despus de definir cada una de las columnas que compone la
tabla se pueden aadir una serie de restricciones, esas restricciones son las mismas que se pueden
indicar para cada columna pero ahora pueden afectar a ms de una columna por eso tienen una
sintaxis ligeramente diferente.
primary key: (Aj1,Aj2..Ajn): la especificacin de clave primaria dice que los atributos
Aj1,Aj2..Ajn forman la clave primaria de la relacin. Los atributos de la clave primaria deben
ser no nulos y nicos; es decir, ninguna tupla puede tener un valor nulo para un atributo de la
clave primaria y ningn par de tuplas pueden de la relacin pueden ser iguales en todos los
atributos de la clave primaria. Aunque la especificacin de clave primaria es opcional, es
generalmente buena idea especificar una clave primaria para cada relacin.
En una tabla no pueden haber varias claves principales, por lo que no podemos incluir la
clusula PRIMARY KEY ms de una vez, en caso contrario la sentencia da un error. No hay que
confundir la definicin de varias claves principales con la definicin de una clave principal
compuesta por varias columnas, esto ltimo s est permitido.
check(P): Especifica un predicado P que debe satisfacer cada tupla de la relacin.
2

Lenguaje de Definicin de Datos

Ejemplo: Utilizacin de la clusula check para simular un tipo enumerado especificando que
nivel_estudios debe ser <<Graduado>>, <<Licenciado>>, <<Doctorado>>.
create table estudiante(
(nombre_est varchar(30) not null,
no_carnet varchar(10) not null,
nivel_estudios char(15) not null,
primary key(no_carnet),
check (nivel_estudios in (Graduado, Licenciado, Doctorado))
)
unique (Aj1,Aj2..Ajn): Indica que los atributos Aj1,Aj2..Ajn forman una clave candidata; es
decir; no puede haber tuplas en la relacin con todos los atributos que forman la clave
candidata iguales. Sin embargo, se permite que los atributos que formal la clave candidata sean
nulos, a menos que se hayan declarado como not null.
Ejemplo:
create table ejemplo(
col1 integer constraint pk primary key,
col2 char(25) not null,
col3 CHAR(10) constraint uni1 unique,
col4 integer,
col5 int constraint fk5 references ejemplo2
);
Con este ejemplo estamos creando la tabla ejemplo compuesta por: una columna llamada col1 de
tipo entero definida como clave principal, una columna col2 que puede almacenar hasta 25
caracteres alfanumricos y no puede contener valores nulos, una columna col3 de hasta 10
caracteres que no podr contener valores repetidos, una columna col4 de tipo entero sin ninguna
restriccin, y una columna col5 de tipo entero clave fornea que hace referencia a valores de la
clave principal de la tabla ejemplo2.
Ejemplo: Definicin de datos en SQL para parte de la Base de Datos del Banco
create table Cliente(
(nombre_cliente char(20) not null),
calle_cliente varchar(50),
ciudad_cliente char(30)),
primary key (nombre_cliente)
)
create table Sucursal(
(nombre_sucursal varchar(30) not null)
ciudad_sucursal char(30)),
activo float,
primary key (nombre_sucursal),
check (activo>=0)
)

Lenguaje de Definicin de Datos

create table Cuenta(


(numero_cuenta char(10) not null)
nombre_sucursal varchar(30)),
saldo float,
primary key (numero_cuenta),
check (saldo>=0)
)
6.3.2 Integridad Referencial en SQL
Las claves primarias pueden especificarse como parte de la instruccin create table de SQL usando
las clusula foreign key. De manera predeterminada, una clave externa referencia los atributos
que forman la clave primaria de la tabla referenciada. SQl tambin soporta una versin de la
clusula referentes, donde se puede especificar explcitamente una lista de atributos de la relacin
referenciada. Esta lista se debe declarar como clave candidata de la relacin referenciada.
Se puede usar la siguiente forma abreviada como parte de la definicin de un atributo para
declarar que el atributo forma una clave externa:
nombre_sucursal char (30) references Sucursal
Cuando se viola una restriccin de integridad referencial, el procedimiento normal es rechazar la
accin que provoc la violacin. Sin embargo, la clusula foreign key puede especificar que si una
accin de borrado o de actualizacin de la relacin a la que hace referencia viola la restriccin, en
lugar de rechazar la accin, hay que adoptar las medidas para modificar la tupla de la relacin que
hace la referencia con objeto de restaurar la restriccin
create table Impositor(
(numero_cliente char(20) not null)
numero_cuenta char(10),
primary key (numero_cuenta, nombre_cliente),
foreign key (numero_cuenta) referentes Cuenta,
foreign key (nombre_cliente) referentes Cuenta
)
create table Cuenta(
(numero_cuenta char(10) not null)
nombre_sucursal varchar(30)),
saldo float,
primary key (numero_cuenta),
foreign key (nombre_sucursal) references Sucursal,
check (saldo>=0)
)
6.3.3 Alter table
La sentencia ALTER TABLE sirve para modificar la estructura de una tabla que ya existe. Mediante
esta instruccin podemos aadir columnas nuevas, eliminar columnas. Ten cuenta que cuando
eliminamos una columna se pierden todos los datos almacenados en ella.

Lenguaje de Definicin de Datos

Tambin nos permite crear nuevas restricciones o borrar algunas existentes. La sintaxis puede
parecer algo complicada pero sabiendo el significado de las palabras reservadas la sentencia se
aclara bastante; ADD (aade), ALTER (modifica), DROP (elimina), COLUMN (columna), CONSTRAINT
(restriccin).
La sintaxis de la instruccin es:
alter table r add A D
Donde r es el nombre de la relacin existente, A es el nombre del atributo que se desea aadir y D
es el dominio (tipo de dato) del atributo A.
Para aadir una nueva restriccin en la tabla podemos utilizar la clusula ADD restriccion2 (ADD
CONSTRAINT...).
Ejemplo:
alter table tab1 add constraint c1 unique (col3)
Con este ejemplo estamos aadiendo a la tabla tab1 un ndice nico (sin duplicados) llamado c1
sobre la columna col3.
Para borrar una columna basta con utilizar la clusula drop column (column es opcional) y el
nombre de la columna que queremos borrar, se perdern todos los datos almacenados en la
columna.
Ejemplo:
alter table tab1 drop column col3
Tambin podemos escribir:
alter table tab1 drop col3
El resultado es el mismo, la columna col3 desaparece de la tabla tab1.
Para borrar una restriccin basta con utilizar la clusula drop constraint y el nombre de la
restriccin que queremos borrar, en este caso slo se elimina la definicin de la restriccin pero
los datos almacenados no se modifican ni se pierden.
Ejemplo:
alter table tab1 drop constraint c1
Con esta sentencia borramos el ndice c1 creado anteriormente pero los datos de la columna col3
no se ven afectados por el cambio.
6.3.4 Drop Table
La sentencia drop table sirve para eliminar una tabla. No se puede eliminar una tabla si est
abierta, tampoco la podemos eliminar si el borrado infringe las reglas de integridad referencial (si
interviene como tabla padre en una relacin y tiene registros relacionados).

Lenguaje de Definicin de Datos

La sintaxis es la siguiente:
drop table r
Tiene una repercusin ms drstica que: delete from r
6.4

Creacin de ndices

En la definicin de los esquemas relacionales es muy importante la definicin de ndices con el fin
de mejorar el rendimiento en cuanto al acceso de los datos de la Base de Datos. Se debe tener
cuidado en no utilizar en forma innecesaria la creacin de ndices ya que al actualizarlos afectan el
desempeo de ciertas operaciones como borrado e insercin, por lo que se recomienda indexar
hasta que se han introducido una cantidad considerable de tuplas.
La sintaxis para la creacin de ndices en SQL es la siguiente:
create index

<Nombre del ndice> on <Nombre de la tabla> (Lista de Campos);

El efecto es que se crea el un archivo ndice para una determinada tabla definida en el comando.
La lista de Campos indica los atributos que conformarn el ndice siendo el primero de la lista el
principal.
Ejemplo:
create index Ind_1 on Estudiante (Nombre);
El efecto es que se crea un ndice con nombre Ind_1 que afectar al atributo Nombre de la tabla
Estudiante
Un ndice ya creado se elimina con el comando:
drop index <Nombre del ndice>

También podría gustarte