SQL - DDL
Andrés Henao Rosero
Universidad Tecnológica de Pereira
Tomado de:
Gloria Lucía Giraldo Gómez
Universidad Nacional de Colombia
Bases de Datos I Andres Henao Rosero - UTP 1
SQL:DDL
DDL: Lenguaje de Definición de Datos
Permite crear objetos en la Base de
Datos
Tipos de Objetos:
- Tablas
- Índices
- Vistas
- Otros
Bases de Datos I Andres Henao Rosero - UTP 2
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;
Bases de Datos I Andres Henao Rosero - UTP 3
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.
Bases de Datos I Andres Henao Rosero - UTP 4
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.
Bases de Datos I Andres Henao Rosero - UTP 5
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)
Bases de Datos I Andres Henao Rosero - UTP 6
Sea el modelo:
DEPARTAMENTO
# código
* nombre
* ciudad
el lugar de trabajo de
adscrito a
EMPLEADO
#cédula
el subordinado * nombre
de * salario
comisión
* cargo
el jefe de
Bases de Datos I Andres Henao Rosero - UTP 7
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
);
El atributo ciudad sólo admitirá 1 de estas 3
ciudades. Es necesario además colocarle la
restricción de no nulidad.
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, Clave foránea
comisión NUMBER(2) , sobre la
cargo VARCHAR(20) NOT NULL, misma tabla
depto NUMBER(6) NOT NULL REFERENCES departamento
);
Bases de Datos I Andres Henao Rosero - UTP Clave foránea8
Restricciones de Integridad
Ejemplos con la cláusula CHECK:
Puede especificarse
CREATE TABLE empleado el atributo hacia el
Cual se refiere la
( cédula NUMBER(10) PRIMARY KEY, clave foránea
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
);
Bases de Datos I Andres Henao Rosero - UTP 9
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.
Bases de Datos I Andres Henao Rosero - UTP 10
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.
Bases de Datos I Andres Henao Rosero - UTP 11
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;
Bases de Datos I Andres Henao Rosero - UTP 12
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…
Bases de Datos I ¿QuéHenao
Andres pasa con- UTP
Rosero el atributo b en este caso?
13
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…
Bases de Datos I Andres Henao Rosero - UTP 14
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…
Bases de Datos I Andres Henao Rosero - UTP 15
Actualizando valores …
Ejemplo:
UPDATE envio
SET cantidad = cantidad - 5
WHERE snro = 10 AND pnro = 20;
Bases de Datos I Andres Henao Rosero - UTP 16
Implementación de un Arco
EMPLEADO
FACTURA # cédula
* nombre
# código * carné
* fecha
AUTO
# placa
* marca
Bases de Datos I Andres Henao Rosero - UTP 17
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');
Bases de Datos I Andres Henao Rosero - UTP 18
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,Andres
Bases de Datos I
la Henao
otraRosero
CF- es
UTP
no nula… 19
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);
Bases de Datos I Andres Henao Rosero - UTP 20
Implementación de
Supertipos/Subtipos
PERSONA
#cédula
*nombre
ESTUDIANTE
*promedio
PROFESOR
*registro
Bases de Datos I Andres Henao Rosero - UTP 21
SUPERTIPOS/SUBTIPOS
Repasar la clase de Conversión
E-R a Relacional
Veamos la alternativa 2 para
implementar supertipos y subtipos
Bases de Datos I Andres Henao Rosero - UTP 22
SUPERTIPOS/SUBTIPOS
Se crea la tabla para el supertipo:
CREATE TABLE persona(
cedula NUMBER(8) PRIMARY KEY,
nombre VARCHAR(20) NOT NULL );
Bases de Datos I Andres Henao Rosero - UTP 23
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 dígitos: 1 entero, 2 decimales
CREATE TABLE profesor(
cedprof NUMBER(8) PRIMARY KEY REFERENCES persona,
registro NUMBER(5) );
Bases de Datos I Andres Henao Rosero - UTP 24
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
Bases de Datos I Andres Henao Rosero - UTP 25