Title: SQL: DDL
1SQL DDL
2SQLDDL
- DDL Lenguaje de Definición de Datos
- Permite crear objetos en la Base de Datos
- Tipos de Objetos
- - Tablas
- - Índices
- - Vistas
- - Otros
3SQLDDL
- 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
4- 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.
5Restricciones 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.
6Restricciones 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)
-
7DEPARTAMENTO 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
8- 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
9Restricciones 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 gt 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
10Restricciones 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.
11Restricciones 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.
12Restricciones 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
13Ingresando 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?
14Eliminando valores
- Para eliminar filas de una tabla
- DELETE
- FROM tabla
- WHERE condicion
- Ej DELETE
- FROM envio
- WHERE snro34
- La condición puede incluir subconsultas
15Actualizando 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
16Actualizando valores
- Ejemplo
- UPDATE envio
- SET cantidad cantidad - 5
- WHERE snro 10 AND pnro 20
17- Implementación de un Arco
EMPLEADO cédula nombre carné
FACTURA código fecha
AUTO placa marca
18- 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
19- 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
20Genera 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)
21Implementación de Supertipos/Subtipos
PERSONA cédula nombre
ESTUDIANTE promedio
PROFESOR registro
22SUPERTIPOS/SUBTIPOS
- Repasar la clase de Conversión
- E-R a Relacional
- Veamos la alternativa 2 para implementar
supertipos y subtipos
23SUPERTIPOS/SUBTIPOS
- Se crea la tabla para el supertipo
- CREATE TABLE persona(
- cedula NUMBER(8) PRIMARY KEY,
- nombre VARCHAR(20) NOT NULL )
24SUPERTIPOS/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
25- 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