3.1. Sentencias de definición
3.1. Sentencias de definición Carlos 25 Noviembre, 2009 - 12:50• Creación de la base de datos
Atención |
En algunos casos es conveniente la definición de dominios para facilitar el trabajo posterior de mantenimiento de la coherencia de la base de datos. No es acon- sejable definir dominios para cada dominio relacional, pero sí en los casos en que una columna puede tomar una serie de valores determinados. |
CREATE SCHEMA GESTION_PETICIONES;
• Definición de dominios
CREATE DOMAIN dom_estados AS CHAR (20)
CONSTRAINT estados_validos
CHECK (VALUE IN (`Nueva´,´Se necesitan más datos´,´Aceptada´, ´Confirmada´, ´Resuelta´,`Cerrada´))
DEFAULT `Nueva´;
• Creación de las tablas
Atención |
Aquí deberemos tener en cuenta las reglas de integridad, ya que habrá que explicitar la política escogida como restricción. |
CREATE TABLE PETICION ( referencia INTEGER NOT NULL,
cliente INTEGER NOT NULL,
resumen CHARACTER VARYING (2048),
estado dom_estados NOT NULL,
fecharecepcion TIMESTAMP NOT NULL,
fechainicio TIMESTAMP, fechafin IMESTAMP,
tiempoempleado TIME, PRIMARY KEY (referencia),
FOREIGN KEY cliente REFERENCES CLIENTE(nif)
ON DELETE CASCADE
ON UPDATE CASCADE,
CHECK (fecharecepcion < fechainicio),
CHECK (fechainicio < fechafin) );
CREATE TABLE NOTA_PETICION ( peticion INTEGER NOT NULL,
nota CHARACTER VARYING (64000),
fecha TIMESTAMP NOT NULL,
empleado CHARACTER (9),
FOREIGN KEY (peticion) REFERENCES PETICION(referencia)
ON DELETE NO ACTION>
ON UPDATE CASCADE,
FOREIGN KEY (empleado) REFERENCES EMPLEADO(nif)
ON DELETE NO ACTION
ON UPDATE CASCADE );
CREATE TABLE MATERIAL_PETICION ( nombrematerial CHARACTER VARYING (100) NOT NULL,
peticion INTEGER NOT NULL,
precio DECIMAL(8,2),
cantidad INTEGER,
FOREIGN KEY (peticion) REFERENCES PETICION(referencia)
ON DELETE NO ACTION
ON UPDATE CASCADE );
CREATE TABLE CLIENTE ( nombre CHARACTER VARYING (100) NOT NULL,
nif CHARACTER (9) NOT NULL,
telefono CHARACTER (15),
email CHARACTER (50),
PRIMARY KEY (nif) );
CREATE TABLE EMPLEADO (nombre CHARACTER VARYING (100) NOT NULL,
nif CHARACTER (9) NOT NULL,
PRIMARY KEY (nif) );
• Creación de vistas
Función de vistas |
Las vistas agilizarán las consultas que prevemos que van a ser mas frecuentes. |
– Peticiones pendientes:
CREATE VIEW peticiones_pendientes (referencia, nombre_cliente, resumen, estado, duracion, fecharecepcion) AS (
SELECT P.referencia, C.nombre, P.resumen, P.estado,(P.fechainicio P.fecharecepcion), P.fecharecepcion
FROM PETICION P JOIN CLIENTE C ON P.cliente = C.nif
WHERE estado NOT IN (`Resuelta´,´Cerrada´) ORDER BY fecharecepcion )
– Tiempo y precio de los materiales empleados para las peticiones terminadas en el mes en curso:
CREATE VIEW peticiones_terminadas (referencia, nombre_cliente, resumen, tiempo_empleado, importe_materiales) AS (
SELECT P.referencia, C.nombre, P.resumen, P.tiempoempleado, SUM(M.precio)
FROM PETICION P, CLIENTE C, MATERIAL_PETICION M
WHERE P.cliente=C.nif AND M.peticion=P.referencia AND estado=`Resuelta´
GROUP BY P.referencia)