Sei sulla pagina 1di 25

SQL: DDL

SQL:DDL
DDL: Lenguaje de Definicin 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 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;

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

Restricciones

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.

de

dominio:

Restricciones de Integridad
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 KEY Clave Primaria: Garantiza la unicidad y obligatoriedad del o los atributos definidos como clave primaria. Para ello se utiliza la clusula PRIMARY KEY.
Nulos:

Restricciones de Integridad
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)

Sea el modelo:
DEPARTAMENTO # cdigo * nombre * ciudad el lugar de trabajo de

adscrito a EMPLEADO #cdula * nombre * salario comisin * 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 ('Medelln', 'Bogot', 'Cali')) NOT NULL );
El atributo ciudad slo admitir 1 de estas 3 ciudades. Es necesario adems colocarle la restriccin de no nulidad.

CREATE TABLE empleado ( cdula NUMBER(10) nombre VARCHAR(30) jefe NUMBER(10) salario NUMBER(10,2) comisin NUMBER(2) , cargo VARCHAR(20) depto NUMBER(6) NOT );

PRIMARY KEY, NOT NULL, REFERENCES empleado, Clave fornea NOT NULL, NOT NULL, NULL REFERENCES departamento
Clave fornea sobre la misma tabla

Restricciones de Integridad
Ejemplos con la clusula CHECK:
CREATE TABLE empleado ( cdula NUMBER(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 especificarse el atributo hacia el cual se refiere la clave fornea

Restricciones de Integridad
Especificacin 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 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 referencia es 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;

Ingresando valores
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 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 condicin 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 separndolos por comas - La condicin y nuevo_valor pueden incluir subconsultas

Actualizando valores
Ejemplo:

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

Implementacin de un Arco
EMPLEADO # cdula * nombre * carn

FACTURA # cdigo * fecha

AUTO # placa * marca

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

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');

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

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 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);

Implementacin de Supertipos/Subtipos
PERSONA #cdula *nombre ESTUDIANTE *promedio

PROFESOR
*registro

SUPERTIPOS/SUBTIPOS
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
Se crean tablas para cada uno de los subtipos:
CREATE TABLE estudiante( cedest NUMBER(8) PRIMARY KEY REFERENCES persona, promedio NUMBER(3,2) );
3 dgitos: 1 entero, 2 decimales

CREATE TABLE profesor( cedprof NUMBER(8) PRIMARY KEY REFERENCES persona, registro NUMBER(5) );

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

Potrebbero piacerti anche