25
SQL: DDL

SQL-Lenguaje de Definicion de Datos-DDL

Embed Size (px)

DESCRIPTION

Lenguaje de definición de datos para SQL Server.

Citation preview

  • SQL: DDL

  • SQL:DDLDDL: Lenguaje de Definicin de DatosPermite crear objetos en la Base de Datos

    Tipos de Objetos:- Tablas- ndices- Vistas- Otros

  • Se pueden crear tablas con la instruccin CREATE TABLE nombre_tabla ( atributos: cada uno con su tipo de datos y restricciones );Se pueden crear ndices as:CREATE INDEX nombreindice ON tabla(columna(s));

    Las vistas no son ms que consultas con nombres Ejemplo:CREATE VIEW nombre_vista AS consulta;SQL:DDL

  • Restricciones de Integridad

    Aseguran que los cambios realizados a una BD no provoquen inconsistencia en la informacin.

    Restricciones de dominio: Conjunto de valores y de operaciones permitidas sobre ellos.

    Dominios base en SQL:CHAR(p): Cadena de caracteres de longitud fija p (mxima longitud p)VARCHAR(p): Cadena de caracteres de longitud variable. Mxima longitud p.NUMBER(p,s): Valor numrico de precisin p y escala s.DATE: Fechas vlidas.

    *

    1

  • Nulos: Un atributo puede o no admitir nulos. En SQL se especifica mediante la clusula NOT NULL.Integridad Referencial: Garantiza la existencia de las Claves Forneas.

    Para ello se utilizan las clusulas REFERENCES y FOREIGN KEYClave Primaria: Garantiza la unicidad y obligatoriedad del o los atributos definidos como clave primaria. Para ello se utiliza la clusula PRIMARY KEY.

    Restricciones de Integridad

    *

    2

  • Clave Alternativa: Garantiza la unicidad de los atributos declarados como tal. Se utiliza la clusula UNIQUE.

    Si se desea hacer obligatoria debe especificarse adicionalmente NOT NULL.

    Las reglas CHECK para atributos:

    Involucra condiciones de chequeo para uno o varios atributos. Sintaxis : CHECK ( condicion) Restricciones de Integridad

  • Sea el modelo:

    DEPARTAMENTO# cdigo * nombre* ciudad EMPLEADO #cdula * nombre * salario comisin * cargo

    el jefe deel subordinado deel lugar de trabajo deadscrito a

  • CREATE TABLE departamento( codigo NUMBER(6) PRIMARY KEY, nombre VARCHAR(6) NOT NULL UNIQUE, ciudadVARCHAR(12) CHECK (ciudad IN ('Medelln', 'Bogot', 'Cali')) NOT NULL);

    CREATE TABLE empleado( cdulaNUMBER(10) PRIMARY KEY, nombre VARCHAR(30)NOT NULL, jefe NUMBER(10) REFERENCES empleado, salario NUMBER(10,2) NOT NULL, comisin NUMBER(2) , cargo VARCHAR(20) NOT NULL, depto NUMBER(6)NOT NULL REFERENCES departamento);El atributo ciudad slo admitir 1 de estas 3 ciudades. Es necesario adems colocarle larestriccin de no nulidad.

    Clave fornea

    Clave fornea sobre la misma tabla

    *

    3

  • Ejemplos con la clusula CHECK:

    CREATE TABLE empleado( cdulaNUMBER(10) PRIMARY KEY, nombre VARCHAR(30) NOT NULL, jefe NUMBER(10) REFERENCES empleado(cdula), salario NUMBER(10,2) NOT NULL CHECK (salario > 0 ) , comision NUMBER(3)CHECK (comision between 0 and 100), cargo VARCHAR(20) NOT NULL, depto NUMBER(6)NOT NULL REFERENCES departamento);Puede especificarseel atributo hacia el cual se refiere la clave fornea

    Restricciones de Integridad

    *

    3

  • CREATE TABLE envio (snro NUMBER(6),pnro NUMBER(6),cantidad NUMBER(6) NOT NULL,PRIMARY KEY(snro,pnro));

    Nota: Es incorrecto colocar PRIMARY KEY al frente de snro y de pnro.Restricciones de IntegridadEspecificacin de una clave primaria compuesta:

  • Clave fornea hacia una clave primaria compuesta:

    CREATE TABLE revision( codrevision NUMBER(5) PRIMARY KEY, cf_snro NUMBER(6) NOT NULL, cf_pnro NUMBER(6) NOT NULL, revisor VARCHAR(20)NOT NULL, FOREIGN KEY(cf_snro,cf_pnro) REFERENCES envio);Cuando la clave primaria a la que se referenciaes compuesta se debe utilizar esta sintaxis.Restricciones de Integridad

  • Se puede modificar la estructura de una tabla con la instruccin ALTER TABLE

    Ej: ALTER TABLE mitabla ADD nuevocampo NUMBER(3);

    Para destruir una tabla (estructura y datos)

    DROP TABLE nombre_tabla; Restricciones de Integridad

  • EJEMPLO: CREATE TABLE t ( a number(3) PRIMARY KEY, b date, c varchar(3));

    INSERT INTO t VALUES(10, CURRENT_DATE, 'hi');INSERT INTO t(c,a) VALUES(bye,20);Se pueden especificar los campos a insertarIngresando valores Qu pasa con el atributo b en este caso?

  • Para eliminar filas de una tabla:

    DELETE FROM tabla [WHERE condicion];

    Ej: DELETE FROM envio WHERE snro=34;La condicin puede incluir subconsultasEliminando valores

  • Para actualizar filas de una tabla:

    UPDATE tabla SET campo = nuevo_valor[WHERE condicion];

    - Se pueden actualizar varios campos al mismo tiempo separndolos por comas - La condicin y nuevo_valor pueden incluir subconsultas

    Actualizando valores

  • Ejemplo:

    UPDATE envio SET cantidad = cantidad - 5WHERE snro = 10 AND pnro = 20;Actualizando valores

  • Implementacin de un Arco

    FACTURA

    # cdigo* fecha

    EMPLEADO# cdula * nombre* carn

    AUTO# placa* marca

  • CREATE TABLE empleado(cedula NUMBER(8) PRIMARY KEY,nombre VARCHAR(25) NOT NULL,carnet NUMBER(5) UNIQUE NOT NULL);

    INSERT INTO empleado VALUES(10,'Dino',20);

    CREATE TABLE auto(placa VARCHAR(10) PRIMARY KEY,marca VARCHAR(20) NOT NULL);

    INSERT INTO auto VALUES('CTV 40','BMW');Clave Alternativa

  • CREATE TABLE factura (codigo NUMBER(6) PRIMARY KEY,fecha DATE NOT NULL,cedula NUMBER(8) REFERENCES empleado,placa VARCHAR(10) REFERENCES auto,CHECK ( (placa IS NULL AND cedula IS NOT NULL) OR (placa IS NOT NULL AND cedula IS NULL) ));Por medio del CHECK se implementa el arco ya que garantiza que si una CF es nula, la otra CF es no nula

  • INSERT INTO factura VALUES(300,SYSDATE,10,NULL);

    INSERT INTO factura VALUES(900,TO_DATE('28/12/04'),NULL,'CTV 40');

    propia de Oracle, en el SQL estndar es CAST

    Note que las dos siguientes inserciones fallan:

    INSERT INTO factura VALUES(500,SYSDATE,10,'CTV 40');

    INSERT INTO factura VALUES(600,SYSDATE,NULL,NULL);

    Genera la fechaactual (en Oracle) En SQL standard es CURRENT DATE

  • Implementacin de Supertipos/SubtiposPERSONA#cdula*nombre

    ESTUDIANTE*promedioPROFESOR*registro

  • Repasar la clase de Conversin

    E-R a Relacional

    Veamos la alternativa 2 para implementar supertipos y subtipos

    SUPERTIPOS/SUBTIPOS

  • Se crea la tabla para el supertipo:

    CREATE TABLE persona( cedula NUMBER(8) PRIMARY KEY, nombre VARCHAR(20) NOT NULL );SUPERTIPOS/SUBTIPOS

  • SUPERTIPOS/SUBTIPOSSe crean tablas para cada uno de los subtipos:

    CREATE TABLE estudiante(cedest NUMBER(8) PRIMARY KEY REFERENCES persona, promedio NUMBER(3,2) );

    CREATE TABLE profesor(cedprof NUMBER(8) PRIMARY KEY REFERENCES persona, registro NUMBER(5) );3 dgitos: 1 entero, 2 decimales

  • En esta alternativa se debe validar por programacin que la cdula de una persona no exista en ambas tablas para garantizar la exclusividad

    *

    1

    *

    2

    *

    3

    *

    3