BASE DE DATOS DE UNA BIBLIOTECA

Ana Isabel Pedrajas Navarro - DAW1V

CREATES

Una vez realizada la modelización de los datos que componen nuestra base de datos mediante el diseño del diagrama entidad relación y de la obtención de nuestro esquema relación con el cual hemos podido obtener un modelo lógico de nuestro sistema, pasamos a la elaboración de los scripts que engloban las sentencias DDL (definición de datos).

Mediante las sentencias DDL, definiremos mediante el lenguaje SQL la estructura de nuestra base de datos. Con estas sentencias podremos realizar las tareas de:

El siguiente código corresponde a las creaciones de las tablas Editorial, Tema, Autor, Libro, Escrito, Ejemplares, Tipo de socio, Socio y Préstamo. Antes de comenzar, queremos mencionar que la mayoría de los atributos de nuestra tabla es de tipo VARCHAR2 y cuyo tamaño varía en función del dato a almacenar ya sea un código (5 caracteres), descripciones, nombres, etc. (40 caracteres) o todo aquel dato numérico con el que no hemos de realizar funciones aritméticas. El resto de los datos son del tipo NUMBER o DATE si trabajamos con fechas.

Para elaborar el script a partir del modelo relacional se han seguido los siguientes pasos:

A la hora de crear una tabla, previamente habíamos escrito la sentencia DROP TABLE para poder eliminar las posibles tablas ya existentes. Esta sentencia la completamos con CASCADE CONSTRAINTS con el fin de eliminar las restricciones de integridad referencial, es decir, eliminamos la tabla con atributos referenciados por otras tablas y sus referencias.

A continuación, creamos la tabla y establecemos los nombres de los atributos, el tipo de dato, la longitud si era necesario y si alguna columna no podría tomar valores nulos (restricción de obligatoriedad).

Para finalizar, declaramos las CONSTRAINTS (restricciones) que pudieran existir al final del bloque como las PRIMARY KEY, FOREIGN KEY y CHECK. A todas estas restricciones se les otorgó un nombre propio por el que poder identificarlas rápidamente en caso de realizar alguna modificación posterior (sentencia ALTER TABLE). En el caso de la tabla Ejemplares, para respetar la integridad referencial y la propagación de la clave se ha indicado que la clave ajena (compuesta) proviene de la clave primaria también compuesta de esa misma tabla y el orden en la declaración se ha mantenido igual.

Enlace al script CREATE
EDITORIAL TEMA AUTOR LIBRO ESCRITO EJEMPLARES TIPO_SOCIO SOCIO PRESTAMO

DROP TABLE EDITORIAL CASCADE CONSTRAINTS;
CREATE TABLE EDITORIAL (
   CIF               VARCHAR(5),
   EDINB             VARCHAR(20)  NOT NULL,
   PAIS              VARCHAR(20)  NOT NULL,
   CIUDAD            VARCHAR(20),
   CODIGO_POSTAL     NUMBER(5),
CONSTRAINT pk_editorial PRIMARY KEY (CIF)
);

DROP TABLE TEMA CASCADE CONSTRAINTS;
CREATE TABLE TEMA (
   CODIGO            VARCHAR(5),
   NOMBRE            VARCHAR(20)  NOT NULL,
   UBICACION         VARCHAR(20)  NOT NULL,
CONSTRAINT pk_tema PRIMARY KEY (CODIGO)
);

DROP TABLE AUTOR CASCADE CONSTRAINTS;
CREATE TABLE AUTOR (
   CODIGO            VARCHAR(5),
   APENOM            VARCHAR(40)  NOT NULL,
   PAIS              VARCHAR(20)  NOT NULL,
   ALIAS             VARCHAR(20),
CONSTRAINT pk_autor PRIMARY KEY (CODIGO)
);

DROP TABLE LIBRO CASCADE CONSTRAINTS;
CREATE TABLE LIBRO (
   ISBN              VARCHAR(5),
   TITULO            VARCHAR(50)  NOT NULL,
   FECHA_IMP         DATE,
   LUGAR_IMP         VARCHAR(20),
   IDIOMA            VARCHAR(10)  NOT NULL,
   NUM_PAG           NUMBER,
   CIF               VARCHAR(9),
   CODIGO            VARCHAR(5),
CONSTRAINT pk_libro PRIMARY KEY (ISBN),
CONSTRAINT fk_libro1 FOREIGN KEY (CIF) REFERENCES EDITORIAL (CIF) ON DELETE CASCADE,
CONSTRAINT fk_libro2 FOREIGN KEY (CODIGO) REFERENCES TEMA (CODIGO) ON DELETE CASCADE
);

DROP TABLE ESCRITO CASCADE CONSTRAINTS;
CREATE TABLE ESCRITO (
   CODIGO            VARCHAR(5),
   ISBN              VARCHAR(5),
CONSTRAINT pk_escrito PRIMARY KEY (CODIGO, ISBN),
CONSTRAINT fk_escrito1 FOREIGN KEY (ISBN) REFERENCES LIBRO (ISBN) ON DELETE CASCADE,
CONSTRAINT fk_escrito2 FOREIGN KEY (CODIGO) REFERENCES AUTOR (CODIGO) ON DELETE CASCADE
);

DROP TABLE EJEMPLARES CASCADE CONSTRAINTS;
CREATE TABLE EJEMPLARES (
   ISBN              VARCHAR(5),
   FORMATO           VARCHAR(10)  NOT NULL,
   ESTADO            VARCHAR(50),
   FECHA_EDICION     DATE         NOT NULL,
CONSTRAINT pk_ejemplares PRIMARY KEY (ISBN, NUM_EJEMPLAR),
CONSTRAINT fk_ejemplares1 FOREIGN KEY (ISBN, NUM_EJEMPLAR) REFERENCES EJEMPLARES (ISBN,NUM_EJEMPLAR) ON DELETE CASCADE
);

DROP TABLE TIPO_SOCIO CASCADE CONSTRAINTS;
CREATE TABLE TIPO_SOCIO (
   CODIGO            VARCHAR(5),
   DESCRIPCION       VARCHAR(30)  NOT NULL,
CONSTRAINT pk_tsocio PRIMARY KEY (CODIGO),
CONSTRAINT c_socio1 CHECK (DESCRIPCION IN('INFANTIL','ADULTO','INSTITUCIONAL'))
);

DROP TABLE SOCIO CASCADE CONSTRAINTS;
CREATE TABLE SOCIO (
   NUM_SOCIO         VARCHAR(5),
   APENOM            VARCHAR(40)  NOT NULL,
   FECHA_NAC         DATE         NOT NULL,
   DIRECCION         VARCHAR(30),
   TELEFONO          VARCHAR(10),
   CODIGO            VARCHAR(5),
CONSTRAINT pk_socio PRIMARY KEY (NUM_SOCIO),
CONSTRAINT fk_socio1 FOREIGN KEY (CODIGO) REFERENCES TIPO_SOCIO (CODIGO) ON DELETE CASCADE
);

DROP TABLE PRESTAMO CASCADE CONSTRAINTS;
CREATE TABLE PRESTAMO (
   NUM_EJEMPLAR      NUMBER,
   ISBN              VARCHAR(5),
   NUM_SOCIO         VARCHAR(5),
   FECHA_INICIO      DATE,
   FECHA_FIN         DATE        NOT NULL,
   FECHA_DEVOLUCION  DATE,
CONSTRAINT pk_prestamo PRIMARY KEY (NUM_EJEMPLAR, ISBN, NUM_SOCIO, FECHA_INICIO),
CONSTRAINT fk_prestamo1 FOREIGN KEY (ISBN,NUM_EJEMPLAR) REFERENCES EJEMPLARES (ISBN,NUM_EJEMPLAR) ON DELETE CASCADE,
CONSTRAINT fk_prestamo2 FOREIGN KEY (NUM_SOCIO) REFERENCES SOCIO (NUM_SOCIO) ON DELETE CASCADE
);