Upload
gustavoquispe
View
27
Download
1
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