Date post: | 21-Oct-2015 |
Category: |
Documents |
Upload: | geovanny-cudco |
View: | 404 times |
Download: | 8 times |
SQL: DDL
SQL:DDL
DDL: Lenguaje de Definición de Datos Permite crear objetos en la Base de
DatosTipos de Objetos:- Tablas- Índices- Vistas- Otros
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;
SQL:DDL
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.
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.
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)
Restricciones de Integridad
Sea el modelo:
DEPARTAMENTO# código * nombre* ciudad
EMPLEADO #cédula * nombre * salario comisión * cargo
el jefe de
el subordinado de
el lugar de trabajo de
adscrito a
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 larestricción de no nulidad.
Clave foránea
Clave foránea sobre la misma tabla
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 especificarseel atributo hacia el cual se refiere la clave foránea
Restricciones de Integridad
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
Especificación de una clave primaria compuesta:
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 referenciaes compuesta se debe utilizar esta sintaxis.
Restricciones de Integridad
Se puede modificar la estructura de una tabla con la instrucción ALTER TABLEEj: 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)t(c,a) VALUES(‘bye’,20);Se pueden especificar los campos a insertar…
Ingresando 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 condición puede incluir subconsultas…
Eliminando 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 - 5WHERE snro = 10 AND pnro = 20;
Actualizando valores …
Implementación de un Arco
FACTURA
# código* fecha
EMPLEADO# cédula * nombre* carné
AUTO# placa* marca
CREATE TABLE empleado(cedula NUMBER(8) PRIMARY KEY,nombre VARCHAR(25) NOT NULL,carnet NUMBER(5) UNIQUEUNIQUE 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 CHECK ( (placa IS NULL AND cedula IS NOT
NULL) NULL) OR OR (placa IS NOT NULL AND cedula IS NULL)(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 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);
Genera la fechaactual (en Oracle) En SQL standard es CURRENT DATE
Implementación de Supertipos/Subtipos
PERSONA#cédula*nombre
ESTUDIANTE
*promedio
PROFESOR
*registro
Repasar la clase de Conversión 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/SUBTIPOS Se 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 dígitos: 1 entero, 2 decimales
En esta alternativa se debe validar por programación que la cédula de una persona no exista en ambas tablas para garantizar la exclusividad