6
 Lenguaje de Definición de Datos 1 TEMA 6: LENGUAJE DE DEFINICIÓN DE DATO S (LDD) 6.1 Introducción Hasta ahora hemos estudiado las sentencias que forman parte del DML (Data Management Language) lenguaje de manipulación 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 más varía de un sistema a otro ya que esa área tiene que ver con cómo se organizan internamente los datos y eso, cada sistema lo hace de una manera u otra. El LDD de SQL permite la especificación no sólo de un conjunto de relaciones, sino también de alguna información relativa a esas relaciones, incluyend o:  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 por cada relación.  Información de seguridad y autorización para cada relación.  La estructura de almacenamiento físico de cada relación en disco. El lenguaje de definición de datos (en i nglés Data Definition Language, o DDL), es el que se encarga de la modificación de la estructura de los objetos de la base de datos. Existen cuatro operaciones básicas: 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 tamaño fijo, con una longitud n especificada por el usuario de hasta un máximo de 255. También 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 máximo de 2000 caracteres. También se puede utilizar la forma completa character varying.  int: Es un entero. Tamb ién se puede utilizar la palabra completa integer.  smallint: Es un entero pequeño (Un subconjunto del dominio de los enteros).   numeric(p,d): Es un número en coma flotante, cuya precisión la especifica el usuario. El número está formado por p dígitos y de esos p dígitos d pertenecen a la parte decimal.  real, double precision: Son respectivamente números en coma flotante y números en coma flotante de doble precisión, con precisión dependiente de la máquina.  float(n): Es un número en coma flotante, cuya precisión es de al menos n dígitos.  date: Es una fecha del calendario, que contiene un año (de cuatro dígitos), un mes y un día del mes.  time: Es la hora del día, expresada en horas, minutos y segundos.  timestamp: Es una combinación de date y time. Los valores de fecha y hora se pueden especificar como: date ‘2009-05-11’ time ’09:30:00’

SQL

Embed Size (px)

DESCRIPTION

Sql

Citation preview

  • Lenguaje de Definicin de Datos

    1

    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

    2

    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.

  • Lenguaje de Definicin de Datos

    3

    Ejemplo: Utilizacin de la clusula check para simular un tipo enumerado especificando que nivel_estudios debe ser , , . 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

    4

    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

    5

    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

    6

    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 on (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