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
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 d epartamento ); 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 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 especificarse el 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 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;   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)  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 - 5 WHERE 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)  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
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…
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 fecha actual (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

SQL-DDL

  • 1.
  • 2.
    SQL:DDL DDL: Lenguajede Definición de Datos Permite crear objetos en la Base de Datos Tipos de Objetos: - Tablas - Índices - Vistas - Otros
  • 3.
    Se pueden creartablas 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
  • 4.
    Restricciones de IntegridadAseguran 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.
  • 5.
    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
  • 6.
    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
  • 7.
    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
  • 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 d epartamento ); 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 Clave foránea sobre la misma tabla
  • 9.
    Ejemplos con laclá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 especificarse el atributo hacia el cual se refiere la clave foránea Restricciones de Integridad
  • 10.
    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:
  • 11.
    Clave foránea haciauna 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
  • 12.
    Se puede modificarla 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; Restricciones de Integridad
  • 13.
    EJEMPLO: CREATETABLE 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… Ingresando valores … ¿Qué pasa con el atributo b en este caso?
  • 14.
    Para eliminar filasde una tabla: DELETE FROM tabla [WHERE condicion]; Ej: DELETE FROM envio WHERE snro=34; La condición puede incluir subconsultas… Eliminando valores …
  • 15.
    Para actualizar filasde 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 …
  • 16.
    Ejemplo: UPDATE envio SET cantidad = cantidad - 5 WHERE snro = 10 AND pnro = 20; Actualizando valores …
  • 17.
    Implementación de un Arco FACTURA # código * fecha EMPLEADO # cédula * nombre * carné 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…
  • 20.
    INSERT INTO facturaVALUES(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 fecha actual (en Oracle) En SQL standard es CURRENT DATE
  • 21.
    Implementación de Supertipos/SubtiposPERSONA #cédula *nombre ESTUDIANTE *promedio PROFESOR *registro
  • 22.
    Repasar la clasede Conversión E-R a Relacional Veamos la alternativa 2 para implementar supertipos y subtipos SUPERTIPOS/SUBTIPOS
  • 23.
    Se crea latabla para el supertipo: CREATE TABLE persona( cedula NUMBER(8) PRIMARY KEY, nombre VARCHAR(20) NOT NULL ); SUPERTIPOS/SUBTIPOS
  • 24.
    SUPERTIPOS/SUBTIPOS Se creantablas 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 alternativase debe validar por programación que la cédula de una persona no exista en ambas tablas para garantizar la exclusividad

Notas del editor