Você está na página 1de 68

Prof.

Robert Espinoza

Lenguaje de definición de datos -


DDL
Agenda

 Introducción.
 SQL DDL.
 Creación de Base de Datos.
 Eliminación de Base de Datos.
 Creación de Tablas.
 Modificación de Tablas.
 Eliminación de Tablas.
 Restricciones de integridad
 Primary Key
 Unique
 Foreign key
 Check
Agenda

 Implementación de Restricciones.
 Creación de índices.
 Eliminación de índices.
 Creación de vistas.
 Modificación de vistas.
 Eliminación de vistas
Agenda

 Eliminación de vistas.
 Creación de secuencias.
 Implementación de secuencias.
 Modificación de secuencia.
 Eliminación de secuencia.
 Resumen.
SQL

 IBM desarrolló la versión original de SQL,


originalmente denominado Sequel, como parte del
proyecto System R a principios de 1970.
 El lenguaje Sequel ha evolucionado desde entonces y
su nombre ha pasado a ser SQL (Structured Query
Language, lenguaje estructurado de consultas).
 En 1986, ANSI e ISO publicaron una norma SQL,
denominada SQL-86.
 La versión más reciente es SQL:2016
SQL

 SQL (Structured Query Language). Lenguaje de


consulta estructurado.
 Es un sublenguaje declarativo de acceso a bases de
datos relacionales que permite especificar diversos
tipos de operaciones.
 Es un lenguaje informático de cuarta generación
(4GL).
SQL

 Componentes (sub lenguajes) del SQL:


 Lenguaje de definición de datos (DDL)
 Lenguaje de manipulación de datos (DML)
 Lenguaje de control de datos (DCL)
 Lenguaje de control de transacciones (TCL)
DDL – Lenguaje de definición de datos

 El DDL, es el que se encarga de la creación y


modificación de la estructura de los objetos de la base
de datos.
 Tipos de objetos
 Tablas.
 Vistas.
 Índices.
 Disparadores.
 Procedimientos.
 Secuencias, etc.
Creación de Bases de datos

CREATE DATABASE nombre_base_datos

Ejemplo:
CREATE DATABASE Sistemas
Creación de Bases de datos
Creación de Bases de datos
CREATE DATABASE Test
LOGFILE GROUP 1 ('/u01/oradata/test/redolog1a.dbf',
'/u02/oradata/test/redolog1b.dbf' ) SIZE 10M,
GROUP 2 ('/u01/oradata/test/redolog2a.dbf',
'/u02/oradata/test/redolog2b.dbf' ) SIZE 10M,
GROUP 3 ('/u01/oradata/test/redolog3a.dbf',
'/u02/oradata/test/redolog3b.dbf' ) SIZE 10M
DEFAULT TABLESPACE system
DATAFILE '/u02/oradata/test/system01.dbf' SIZE 400M
AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
TABLESPACE sysaux
DATAFILE '/u02/oradata/test/sysaux01.dbf' SIZE 300M
AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED
UNDO TABLESPACE ts_undo
DATAFILE '/u02/oradata/test/undo01.dbf' SIZE 50M
AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE ts_temp
TEMPFILE '/u02/oradata/test/temp01.dbf' SIZE 50M
AUTOEXTEND ON NEXT 50M MAXSIZE 300M
Eliminación de Bases de Datos

DROP DATABASE nombre_base_datos

Ejemplo:
DROP DATABASE Sistemas
Restricciones de Integridad

 Aseguran que los cambios realizados a una BD no


provoquen inconsistencia en la información.
 Restricción de dominio.
 Restricción de datos.
 Integridad de entidad.
 Integridad referencial.
 Restricción de unicidad.
 Restricción de chequeo.
Restricciones de Integridad

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)
 VARCHAR2(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

Restricción de datos
 Nulos:

 Un atributo puede o no admitir nulos. En SQL se


especifica mediante la cláusula NOT NULL.
Restricciones de Integridad

Integridad de entidad
 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

Integridad Referencial
 Garantiza la existencia de las Claves Foráneas.

 Para ello se utilizan las cláusulas REFERENCES y


FOREIGN KEY
Restricciones de Integridad

Restricción de Unicidad
 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.
Restricciones de Integridad

Restricción de Chequeo
 Las reglas CHECK para atributos:

 Involucra condiciones de chequeo para uno o varios


atributos.
 Sintaxis: CHECK ( condición )
Creación de Tablas

 CREATE.
Crea una tabla

CREATE [GLOBAL TEMPORARY] TABLE


[schema.]nombre_tabla
(
columna tipo_dato [NOT NULL],
columna tipo_dato [NOT NULL],
{CONSTRAINT nombre_clave_primaria
PRIMARY KEY (columnas_clave) }
{CONSTRAINT nombre_clave_foránea
FOREIGN KEY(columnas_clave)
REFERENCES tabla_detalle( columnas_clave )
{ON DELETE | CASCADE} }
Creación de Tablas

 Ejemplo

CREATE TABLE horario


(
horario_id NUMBER NOT NULL,
hora_ini DATE NOT NULL,
hora_fin DATE NOT NULL,
descripcion VARCHAR2(100)
);
Creación de Tablas

 Ejemplo incluyendo DEFAULT

CREATE TABLE empleado_horario


(
empleado_id NUMBER NOT NULL,
horario_id NUMBER NOT NULL,
dia_inicio DATE DEFAULT sysdate
);
Creación de Tablas

 Campo IDENTITY:
Incorpora a una columna la propiedad de ser autonumérica.

nombre_campo GENERATED [ALWAYS|BY DEFAULT


[ON NULL] ] AS IDENTITY
[ ( identity_options ) ]

ALWAYS Indica que no será necesario introducir un valor para esta columna en una
sentencia insert. Por el contrario indicar un valor aunque sea Null, da un error
BY DEFAULT Le permite utilizar Identity, si la columna no se hace referencia en la una
sentencia insert, pero si se hace referencia a la columna, el valor
especificado se utiliza en lugar de la identidad. El intento de especificar el
valor NULL en este caso se traduce en un error, ya que las columnas de
identidad son siempre NOT NULL.
BY DEFAULT ON NULL Si una sentencia insert se ingresa un valor NULL se generará un
nuevo valor, si en cambio si ingresa un valor para esta columna, se
insertará el valor de la sentencia
Creación de Tablas

 Ejemplo incluyendo GENERATED ALWAYS AS


IDENTITY

CREATE TABLE empleado_horario


(
empleado_id NUMBER GENERATED ALWAYS AS IDENTITY,
horario_id NUMBER NOT NULL,
dia_inicio DATE DEFAULT sysdate
);
Creación de Tablas

 Ejemplo incluyendo GENERATED BY DEFAULT AS


IDENTITY

CREATE TABLE empleado_horario


(
empleado_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
horario_id NUMBER NOT NULL,
dia_inicio DATE DEFAULT sysdate
);
Modificación de tablas

 ALTER TABLE
Modifica la estructura de una tabla.

ALTER TABLE [schema.]nombre_tabla


ADD columna tipo_dato;

Ejemplo:
ALTER TABLE empleado_horario
ADD dia_fin DATE;
Eliminación de tablas

 DROP TABLE
Elimina una tabla

DROP TABLE [schema.]nombre_tabla;

Ejemplo:
DROP TABLE entrenamiento;
Implementación de restricciones

 PRIMARY KEY
Asegura que los valores sean únicos para cada registro.

ALTER TABLE nombre_tabla


ADD CONSTRAINT nombre_restriccion
PRIMARY KEY (campo,...);
Implementación de restricciones

 PRIMARY KEY

CREATE TABLE entrenamiento


(
entrenamiento_id NUMBER NOT NULL,
entrenamiento_nombre VARCHAR2(30) NULL,
descripcion VARCHAR2(100)
);

ALTER TABLE entrenamiento


ADD CONSTRAINT pk_entrenamiento
PRIMARY KEY (entrenamiento_id);
Implementación de restricciones

 PRIMARY KEY

CREATE TABLE entrenamiento


(
entrenamiento_id NUMBER PRIMARY KEY,
entrenamiento_nombre VARCHAR2(30) NULL,
descripcion VARCHAR2(100)
);
Implementación de restricciones

 PRIMARY KEY

CREATE TABLE empleado_entrenamiento


(
empleado_id NUMBER NOT NULL,
entrenamiento_id NUMBER NOT NULL,
CONSTRAINT pk_empleado_entrenamiento
PRIMARY KEY (empleado_id, entrenamiento_id)
);
Implementación de restricciones

 FOREIGN KEY
Se define un campo (o varios) cuyos valores coinciden con
la clave primaria de la misma tabla o de otra, es decir, se
define una referencia a un campo con una restricción
"primary key" o "unique" de la misma tabla o de otra.

ALTER TABLE nombretabla1


ADD CONSTRAINT nombre_restriccion
FOREIGN KEY (campo_clave_foranea)
REFERENCES nombre_tabla2 (campo_clave_primaria);
Implementación de restricciones

 FOREIGN KEY
ALTER TABLE empleado_entrenamiento
ADD CONSTRAINT fk_empleado_entrenamiento
FOREIGN KEY (entrenamiento_id)
REFERENCES entrenamiento (entrenamiento_id);

ALTER TABLE empleado_entrenamiento


ADD CONSTRAINT fk_entrenamiento_empleado
FOREIGN KEY (empleado_id)
REFERENCES empleado (empleado_id);
Implementación de restricciones

 FOREIGN KEY

CREATE TABLE falta


(
falta_id NUMBER PRIMARY KEY,
empleado_id NUMBER NOT NULL
REFERENCES empleado (empleado_id),
dia DATE NOT NULL
);
Implementación de restricciones

 FOREIGN KEY

CREATE TABLE falta


(
falta_id NUMBER PRIMARY KEY,
empleado_id NUMBER NOT NULL,
dia DATE NOT NULL,
CONSTRAINT fk_falta FOREIGN KEY (empleado_id)
REFERENCES empleado (empleado_id),
);
Implementación de restricciones

 UNIQUE
Impide la duplicación de claves alternas (no primarias), es
decir, especifica que dos registros no puedan tener el
mismo valor en un campo. Se permiten valores nulos, salvo
que se indique lo contrario con NOT NULL.

ALTER TABLE nombre_tabla


ADD CONSTRAINT nombre_restriccion
UNIQUE(campo,...)
[NOT NULL];
Implementación de restricciones

 UNIQUE

ALTER TABLE empleado


ADD CONSTRAINT uq_empleado_dni
UNIQUE(dni) NOT NULL;
Implementación de restricciones

 CKECK
Especifica los valores que acepta un campo, evitando que
se ingresen valores inapropiados.

ALTER TABLE nombre_tabla


ADD CONSTRAINT nombre_restriccion
CHECK condicion;
Implementación de restricciones

 CKECK

CREATE TABLE bonos


(
empleado_id NUMBER PRIMARY KEY,
bono NUMBER DEFAULT 0
CONSTRAINT limite_bonos
CHECK (bono BETWEEN 0 AND 10000),
descripcion VARCHAR2(100)
);
Implementación de restricciones

 CKECK

CREATE TABLE bonos


(
empleado_id NUMBER PRIMARY KEY,
bono NUMBER DEFAULT 0,
descripcion VARCHAR2(100),
CONSTRAINT limite_bonos
CHECK (bono BETWEEN 0 AND 10000)
);
Implementación de restricciones

DEPARTAMENTO
#código
*nombre
*ciudad

el lugar de
adscrito a
trabajo de

EMPLEADO
#dni
*nombre
*salario
*comisión
el subordinado *cargo
de

el jefe de
Implementación de restricciones

CREATE TABLE departamento


(
codigo NUMBER(6) PRIMARY KEY,
nombre VARCHAR(20) NOT NULL UNIQUE,
ciudad VARCHAR2(20) CHECK (ciudad IN
(‘Lima’, ’Arequipa’, ‘Trujillo’))
);

El atributo ciudad sólo admitirá 1 de estas


3 ciudades. Es necesario además
colocarle la restricción de no nulidad.
Implementación de restricciones
Clave foránea sobre la misma tabla

CREATE TABLE empleado


( dni CHAR(8) PRIMARY KEY,
nombre VARCHAR2(30) NOT NULL,
jefe CHAR(8) REFERENCES empleado,
salario NUMBER(10,2) NOT NULL,
comision NUMBER(2) ,
cargo VARCHAR2(20) NOT NULL,
dpto NUMBER(6) NOT NULL REFERENCES departamento
);

Clave foránea
Implementación de restricciones

Puede especificarse el atributo hacia


el cual se refiere la clave foránea

CREATE TABLE empleado


( dni CHAR(8) PRIMARY KEY,
nombre VARCHAR2(30) NOT NULL,
jefe CHAR(8) REFERENCES empleado (dni),
salario NUMBER(10,2) NOT NULL CHECK (salario > 0),
comision NUMBER(3)
CHECK (comision BETWEEN 0 AND 100),
cargo VARCHAR2(20) NOT NULL,
dpto NUMBER(6) NOT NULL REFERENCES departamento
);
Implementación de restricciones

CREATE TABLE envio (


snro NUMBER(6),
pnro NUMBER(6),
cantidad NUMBER(6) NOT NULL,
PRIMARY KEY(snro, pnro)
);

Es incorrecto colocar PRIMARY KEY al


frente de snro y de pnro
Implementación de restricciones

CREATE TABLE revision(


codrevision NUMBER(5) PRIMARY KEY,
cf_snro NUMBER(6) NOT NULL,
cf_pnro NUMBER(6) NOT NULL,
revisor VARCHAR2(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.
Implementación de restricciones

EMPLEADO
# dni
* nombre
FACTURA
* salario
# número
* fecha

AUTO
# placa
* marca
Implementación de restricciones

CREATE TABLE Empleado


(
dni NUMBER(8) PRIMARY KEY,
nombre VARCHAR2(25) UNIQUE NOT NULL,
salario NUMBER(8,2) NOT NULL
);

CREATE TABLE Auto


(
placa VARCHAR2(20) PRIMARY KEY,
marca VARCHAR2(20) NOT NULL
);
Implementación de restricciones

CREATE TABLE factura (


numero NUMBER(6) PRIMARY KEY,
fecha DATE NOT NULL,
dni NUMBER(8) REFERENCES empleado,
placa VARCHAR2(10) REFERENCES auto,
CHECK ((placa IS NULL AND dni IS NOT NULL)
OR (placa IS NOT NULL AND dni IS NULL))
);

Por medio del CHECK se garantiza que placa y


dni no sean nulos ala vez..
Implementación de restricciones

 Implementación de Supertipos / Subtipos

PERSONA
# dni
* nombre

ESTUDIANTE
* promedio

PROFESOR
* registro
Implementación de restricciones

 Implementación de un supertipo

CREATE TABLE Persona


(
dni NUMBER(8) PRIMARY KEY,
nombre VARCHAR2(20) NOT NULL
);
Implementación de restricciones

 Implementación de subtipos

CREATE TABLE Estudiante


(
dniest NUMBER(8) PRIMARY KEY REFERENCES persona,
promedio NUMBER(3,2)
);

CREATE TABLE Profesor


(
dniprof NUMBER(8) PRIMARY KEY REFERENCES persona,
registro NUMBER(5)
);
Creación de índices

 Oracle accede a los datos de dos maneras:


 Recorriendo secuencialmente las tablas
 Comenzando desde el principio y extrayendo los registros
que cumplen las condiciones de la consulta; lo cual implica
posicionar las cabezas lectoras, leer el dato, controlar si
coincide con lo que se busca (como si pasáramos una a una
las páginas de un libro buscando un tema específico).
 Empleando índices
 Recorriendo la estructura de árbol del índice para localizar
los registros y extrayendo los que cumplen las condiciones
de la consulta (comparando con un libro, diremos que es
como leer el índice y luego de encontrar el tema buscado, ir
directamente a la página indicada).
Creación de índices

 CREATE INDEX

CREATE [UNIQUE] INDEX [schema.]nombre_indice


ON nombre_tabla (column_name
[,...n][ASC|DESC]);
Creación de índices

CREATE INDEX ind_empleado ON Empleado(salario);

CREATE INDEX indice_factura


ON factura( placa )
TABLESPACE example
STORAGE( INITIAL 500K NEXT 500K);
Eliminación de Índices

 DROP INDEX

DROP INDEX [schema.]nombre_indice [,...n];

Ejemplo:
DROP INDEX ind_empleado;
Creación de Vistas

 CREATE VIEW
Crea una vista, que no es más que una “consulta con
nombre”

CREATE {OR REPLACE} {FORCE} VIEW


[schema.]nombre_vista AS Subconsulta
Creación de Vistas

 CREATE VIEW

CREATE OR REPLACE FORCE VIEW vista_incorrecta


AS SELECT * FROM factura;

CREATE OR REPLACE VIEW factura_cliente AS


SELECT * FROM factura
WHERE numero <= 50;
Modificación de Vistas

 ALTER VIEW

ALTER VIEW [schema.]nombre_vista opciones;

Ejemplo:
ALTER VIEW factura_cliente ADD numero>10;
Modificación de Vistas

 DROP VIEW

DROP VIEW [schema.]nombre_vista;

Ejemplo:
DROP VIEW factura_cliente;
Secuencias (sequence)

 Una secuencia (sequence) se emplea para generar


valores enteros secuenciales únicos y asignárselos a
campos numéricos;
 Se utilizan generalmente para las claves primarias de las
tablas garantizando que sus valores no se repitan.
 Una secuencia es una tabla con un campo numérico
en el cual se almacena un valor y cada vez que se
consulta, se incrementa tal valor para la próxima
consulta.
Creación de una secuencia

 CREATE SEQUENCE

CREATE SEQUENCE nombre_secuencia


{START WITH entero}
{INCREMENT BY entero}
{MAXVALUE entero }
{MINVALUE entero }
{CYCLE | NOCYCLE}
Creación de una secuencia

 CREATE SEQUENCE
 START WITH, indica el valor desde el cual comenzará la
generación de números secuenciales. Si no se especifica, se
inicia con el valor que indique MINVALUE.
 INCREMENT BY, especifica el incremento. Debe ser un valor
numérico entero positivo o negativo diferente de 0. Si no se
indica, por defecto es 1.
 MAXVALUE, define el valor máximo para la secuencia. Si se
omite, por defecto es 9999999999999999999999999.
 MINVALUE, establece el valor mínimo de la secuencia. Si se
omite será 1.
 CYCLE indica que, cuando la secuencia llegue a máximo valor
se reinicie, comenzando con el mínimo valor nuevamente. Si
se omite, por defecto la secuencia se crea NOCYCLE.
Creación de una secuencia

 CREATE SEQUENCE

CREATE SEQUENCE cod_cliente INCREMENT BY 10;

CREATE SEQUENCE cod_cliente


INCREMENT BY 10 MAXVALUE 5000 CYCLE;
Implementación de una secuencia

CREATE TABLE Departamento


(
codigo NUMERIC(6) NOT NULL,
nombre VARCHAR2(30) NOT NULL
);

CREATE SEQUENCE secuencia_departamento


START WITH 1
INCREMENT BY 1
MAXVALUE 999999
MINVALUE 1;

INSERT INTO Departamento


VALUES(secuencia_departamento.NEXTVAL,'Sistemas');
Modificación de una secuencia

 ALTER SEQUENCE

ALTER SEQUENCE [schema.]nombre_vista opciones;

Ejemplo:

ALTER SEQUENCE secuencia_departamento CYCLE;


Eliminación de una secuencia

 DROP SEQUENCE

DROP SEQUENCE [schema.]nombre_vista;

Ejemplo:

DROP SEQUENCE secuencia_departamento;


Resumen

 El SQL DDL (lenguaje de definición de datos) permite


la creación y modificación de diversos objetos de la
base de datos.
 Además se puede crear:
 Schema
 Package
 Function
 Role
 User, etc.

Você também pode gostar