Вы находитесь на странице: 1из 25

SQL: DDL

SQL:DDL
 DDL: Lenguaje de Definición 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 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;
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.


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.
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)
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
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
);
Clave foránea
Restricciones de Integridad

Ejemplos con la cláusula CHECK:


Puede especificarse
el atributo hacia el
CREATE TABLE empleado 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
);
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.
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.
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;
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 condición 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 separándolos por comas
- La condición y nuevo_valor pueden incluir
subconsultas…
Actualizando valores …

Ejemplo:

UPDATE envio
SET cantidad = cantidad - 5
WHERE snro = 10 AND pnro = 20;
Implementación de un Arco

EMPLEADO
FACTURA # cédula
* nombre
# código * carné
* 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)
) medio del CHECK se implementa
Por
); 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 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);


Implementación de
Supertipos/Subtipos

PERSONA
#cédula
*nombre

ESTUDIANTE
*promedio

PROFESOR
*registro
SUPERTIPOS/SUBTIPOS

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

Вам также может понравиться