Saltar al contenido
Codifíca.me | Desarrollo web | Programación

Ejercicios de creación de tablas, restricciones , tipos de datos

27 marzo, 2019
mysql

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));

 

mysql-encriptar