SQL: DDL
SQL:DDL DDL: Lenguaje de Definición de Datos Permite crear objetos en la Base de Datos Tipos de Objetos: - Tablas - Índices - Vistas - Otros
SQL:DDL Se pueden crear tablas con la instrucción 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 más que “consultas con nombres” Ejemplo: CREATE VIEW nombre_vista AS consulta;
Restricciones de Integridad Aseguran que los cambios realizados a una BD no provoquen inconsistencia en la información. 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 (máxima longitud p) VARCHAR(p): Cadena de caracteres de longitud variable. Máxima longitud p. NUMBER(p,s): Valor numérico de precisión p y escala s. DATE: Fechas válidas. 1
Restricciones de Integridad Nulos: Un atributo puede o no admitir nulos. En SQL se especifica mediante la cláusula NOT NULL. Integridad Referencial: Garantiza la existencia de las Claves Foráneas. Para ello se utilizan las cláusulas REFERENCES y FOREIGN KEY Clave Primaria: Garantiza la unicidad y obligatoriedad del o los atributos definidos como clave primaria. Para ello se utiliza la cláusula PRIMARY KEY. 2
Restricciones de Integridad Clave Alternativa: Garantiza la unicidad de los atributos declarados como tal. Se utiliza la cláusula 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)
Sea el modelo: DEPARTAMENTO # código * nombre * ciudad el lugar de trabajo de adscrito a EMPLEADO #cédula * nombre * salario comisión * cargo el subordinado de el jefe de
CREATE TABLE departamento ( codigo NUMBER(6) PRIMARY KEY, nombre VARCHAR(6) NOT NULL UNIQUE, ciudad VARCHAR(12) CHECK (ciudad IN ('Medellín', 'Bogotá', 'Cali')) NOT NULL ); CREATE TABLE empleado ( cédula NUMBER(10) PRIMARY KEY, nombre VARCHAR(30) NOT NULL, jefe NUMBER(10) REFERENCES empleado, salario NUMBER(10,2) NOT NULL, comisión NUMBER(2) , cargo VARCHAR(20) NOT NULL, depto NUMBER(6) NOT NULL REFERENCES departamento El atributo ciudad sólo admitirá 1 de estas 3 ciudades. Es necesario además colocarle la restricción de no nulidad. Clave foránea sobre la misma tabla Clave foránea 3
Restricciones de Integridad Ejemplos con la cláusula CHECK: CREATE TABLE empleado ( cédula NUMBER(10) PRIMARY KEY, nombre VARCHAR(30) NOT NULL, jefe NUMBER(10) REFERENCES empleado(cédula), 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 especificarse el atributo hacia el cual se refiere la clave foránea 3
Restricciones de Integridad Especificación de una clave primaria compuesta: 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 Integridad Clave foránea 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 referencia es compuesta se debe utilizar esta sintaxis.
Restricciones de Integridad Se puede modificar la estructura de una tabla con la instrucción ALTER TABLE Ej: ALTER TABLE mitabla ADD nuevocampo NUMBER(3); Para destruir una tabla (estructura y datos) DROP TABLE nombre_tabla;
Ingresando valores … EJEMPLO: INSERT INTO t(c,a) VALUES(‘bye’,20); 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 insertar… ¿Qué pasa con el atributo b en este caso?
Eliminando valores … Para eliminar filas de una tabla: DELETE FROM tabla [WHERE condicion]; Ej: DELETE FROM envio WHERE snro=34; La condición puede incluir subconsultas…
Actualizando valores … Para actualizar filas de una tabla: UPDATE tabla SET campo = nuevo_valor [WHERE condicion]; - Se pueden actualizar varios campos al mismo tiempo separándolos por comas - La condición y nuevo_valor pueden incluir subconsultas…
Actualizando valores … Ejemplo: UPDATE envio SET cantidad = cantidad - 5 WHERE snro = 10 AND pnro = 20;
Implementación de un Arco EMPLEADO # cédula * nombre * carné FACTURA # código * fecha 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
codigo NUMBER(6) PRIMARY KEY, fecha DATE NOT NULL, 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…
Note que las dos siguientes inserciones fallan: Genera la fecha actual (en Oracle) En SQL standard es CURRENT DATE 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 estándar 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);