Por cada una de estas tablas, se va a mostrar primero la definición del trabajo anterior para tener una referencia sobre la que trabajar. A continuación justificaremos el tipo de dato elegido para cada columna y, posteriormente, las restricciones. Por último, se mostrará el script DDL que creará la tabla con las indicaciones previas.
2 TABLAS
2.1 TABLA SOCIO
2.1.1 Contexto
La tabla Socio se forma a partir de la entidad Socio obteniendo de ella todos los atributos. La clave primaria es “num_socio” y el dni, clave candidata, se trataría como atributo no clave (a pesar de que no podrá ser nulo), quedando así: SOCIO(num_socio, dni, apellidos, telefono, caducidad)
2.1.2 Tipos de dato para cada columna
num_socio: debe ser un tipo de dato numérico ya que esto basta para identificar a cada fila
dni: tipo de dato VARCHAR2 con longitud 9 para contener el número del dni y la letra
apellidos: VARCHAR2 con tamaño 50, suficiente para almacenar dos apellidos
telefono: NUMBER. En función de si se quiere almacenar teléfonos extranjeros o sólo españoles deberá tener mayor o menor longitud
caducidad: como almacena una fecha, el tipo de dato será DATE
2.1.3 Restricciones
num_socio: será clave principal
dni: no puede haber dos filas con el mismo dni, por lo que ha de ser único
2.1.4 DDL
create table socio
(num_socio NUMBER PRIMARY KEY,
dni VARCHAR2(9) UNIQUE,
apellidos VARCHAR2(50),
telefono NUMBER,
caducidad DATE);
2.2 TABLA PRESTAMO
2.2.1 Contexto
La relación “Préstamo” quedaría así: PRESTAMO (num_prestamo, fecha, num_socio, tipo, fecha_devolucion)
2.2.2 Tipos de dato para cada columna
num_prestamo: valor numérico, suficiente para identificar cada fila
fecha: tipo de dato DATE
num_socio: mismo tipo de dato que num_socio de la tabla socio
tipo: VARCHAR2 con longitud 10, suficiente para almacenar el valor INTERNO/EXTERNO
fecha_devolucion: tipo de dato DATE
2.2.3 Restricciones
num_prestamo: como identifica a cada fila, será primary key
fecha: por defecto tomará el valor SYSDATE, que será el momento en el que se haga el préstamo
num_socio: foreign key que referencia a la columna num_socio de la tabla socio
tipo: check constraint que comprueba que los valores sean INTERNO o EXTERNO
2.2.4 DDL
create table prestamo
(num_prestamo NUMBER PRIMARY KEY,
fecha DATE default SYSDATE,
num_socio NUMBER REFERENCES socio(num_socio),
tipo VARCHAR2(10) CHECK (tipo in (‘INTERNO’, ‘EXTERNO’)),
fecha_devolucion DATE);
2.3 TABLA LIBRO
2.3.1 Contexto
La tabla “libro” se forma a partir de la entidad “Libro”. La clave primaria es “ISBN” y el resto son atributos no clave quedando la tabla de la siguiente manera: LIBRO(isbn, titulo, autor, cantidad)
2.3.2 Tipos de dato para cada columna
isbn: el International Standard Book Number está definido como un valor numérico por lo que mantenemos dicho tipo de dato
titulo: VARCHAR2 con longitud 50, suficiente para almacenar el título de un libro
autor: VARCHAR2 con longitud 50, suficiente para almacenar el nombre y apellidos de un autor
cantidad: NUMBER(3) para almacenar hasta 1000 ejemplares de dicho libro
2.3.3 Restricciones
isbn: como es el identificador de cada libro, será el primary key
titulo: no puede ser nulo
cantidad: por defecto tiene valor 0 para facilitar la inserción cuando se piden nuevos libros y antes de que lleguen
2.3.4 DDL
create table libro
(isbn NUMBER PRIMARY KEY,
titulo VARCHAR2(50) NOT NULL,
autor VARCHAR2(50),
cantidad NUMBER(3) default 0);
2.4 TABLA EJEMPLAR
2.4.1 Contexto
La tabla “ejemplar” se forma a partir de la entidad “Ejemplar”. Como es una entidad débil, tendrá que tener sus propios atributos más la clave primaria de la entidad fuerte de la que depende, quedando la tabla de esta manera: EJEMPLAR(isbn, num_ejemplar, disponible)
2.4.2 Tipos de dato para cada columna
num_ejemplar: valor numérico para identificar cada ejemplar
isbn: mismo tipo pde dato que isbn de la tabla libro
disponible: se simula un boolean con un tipo de dato char
2.4.3 Restricciones
num_ejemplar: primary key al ser el identificador de cada fila
isbn: foreign key que referencia a cada libro mediante la columna isbn de la tabla libro
disponible: check constraint para simular un boolean, por lo que sólo puede tomar los valores 0 o 1
2.4.4 DDL
create table ejemplar
(num_ejemplar NUMBER PRIMARY KEY,
isbn NUMBER REFERENCES libro(isbn),
disponible CHAR CHECK (disponible in (0,1)));
2.5 TABLA CONTIENE
2.5.1 Contexto
La interrelación “Contiene” tiene cardinalidad 1:1. Por ello, se transformará en una relación que contenga las claves primarias de las entidades interrelacionadas. La clave privada será únicamente la clave privada de una de las entidades, quedando de esta manera: CONTIENE(num_prestamo, isbn)
2.5.2 Tipos de dato para cada columna
num_prestamo: mismo tipo de dato que la columna num_prestamo de la tabla prestamo
isbn: mismo tipo ode dato que la columna isbn de la tabla libro
2.5.3 Restricciones
num_prestamo: clave primaria. Además guarda una referencia a la columna num_prestamo de la tabla prestamo siendo también foreign key
isbn: foreign key contra la columna isbn de la tabla libro
2.5.4 DDL
create table contiene
(num_prestamo NUMBER PRIMARY KEY REFERENCES prestamo(num_prestamo),
isbn NUMBER REFERENCES libro(isbn));