25
SQL: DDL

Supertipos y Subtipos en SQL Server 2008

Embed Size (px)

Citation preview

Page 1: Supertipos y Subtipos en SQL Server 2008

SQL: DDL

Page 2: Supertipos y Subtipos en SQL Server 2008

SQL:DDL

DDL: Lenguaje de Definición de Datos Permite crear objetos en la Base de

DatosTipos de Objetos:- Tablas- Índices- Vistas- Otros

Page 3: Supertipos y Subtipos en SQL Server 2008

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

Page 4: Supertipos y Subtipos en SQL Server 2008

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.

Page 5: Supertipos y Subtipos en SQL Server 2008

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

Page 6: Supertipos y Subtipos en SQL Server 2008

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

Page 7: Supertipos y Subtipos en SQL Server 2008

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

Page 8: Supertipos y Subtipos en SQL Server 2008

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 larestricción de no nulidad.

Clave foránea

Clave foránea sobre la misma tabla

Page 9: Supertipos y Subtipos en SQL Server 2008

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 especificarseel atributo hacia el cual se refiere la clave foránea

Restricciones de Integridad

Page 10: Supertipos y Subtipos en SQL Server 2008

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:

Page 11: Supertipos y Subtipos en SQL Server 2008

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 referenciaes compuesta se debe utilizar esta sintaxis.

Restricciones de Integridad

Page 12: Supertipos y Subtipos en SQL Server 2008

Se puede modificar la estructura de una tabla con la instrucción ALTER TABLEEj: ALTER TABLE mitabla ADD nuevocampo NUMBER(3);

Para destruir una tabla (estructura y datos)

DROP TABLE nombre_tabla;

Restricciones de Integridad

Page 13: Supertipos y Subtipos en SQL Server 2008

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)t(c,a) VALUES(‘bye’,20);Se pueden especificar los campos a insertar…

Ingresando valores …

¿Qué pasa con el atributo b en este caso?

Page 14: Supertipos y Subtipos en SQL Server 2008

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 …

Page 15: Supertipos y Subtipos en SQL Server 2008

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 …

Page 16: Supertipos y Subtipos en SQL Server 2008

Ejemplo:

UPDATE envio SET cantidad = cantidad - 5WHERE snro = 10 AND pnro = 20;

Actualizando valores …

Page 17: Supertipos y Subtipos en SQL Server 2008

Implementación de un Arco

FACTURA

# código* fecha

EMPLEADO# cédula * nombre* carné

AUTO# placa* marca

Page 18: Supertipos y Subtipos en SQL Server 2008

CREATE TABLE empleado(cedula NUMBER(8) PRIMARY KEY,nombre VARCHAR(25) NOT NULL,carnet NUMBER(5) UNIQUEUNIQUE 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

Page 19: Supertipos y Subtipos en SQL Server 2008

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 CHECK ( (placa IS NULL AND cedula IS NOT

NULL) NULL) OR OR (placa IS NOT NULL AND cedula IS NULL)(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…

Page 20: Supertipos y Subtipos en SQL Server 2008

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 fechaactual (en Oracle) En SQL standard es CURRENT DATE

Page 21: Supertipos y Subtipos en SQL Server 2008

Implementación de Supertipos/Subtipos

PERSONA#cédula*nombre

ESTUDIANTE

*promedio

PROFESOR

*registro

Page 22: Supertipos y Subtipos en SQL Server 2008

Repasar la clase de Conversión E-R a Relacional

Veamos la alternativa 2 para implementar supertipos y subtipos

SUPERTIPOS/SUBTIPOS

Page 23: Supertipos y Subtipos en SQL Server 2008

Se crea la tabla para el supertipo:

CREATE TABLE persona( cedula NUMBER(8) PRIMARY KEY, nombre VARCHAR(20) NOT NULL );

SUPERTIPOS/SUBTIPOS

Page 24: Supertipos y Subtipos en SQL Server 2008

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

Page 25: Supertipos y Subtipos en SQL Server 2008

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