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 鈥渘um_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 鈥淧r茅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 鈥渓ibro鈥 se forma a partir de la entidad 鈥淟ibro鈥. La clave primaria es 鈥淚SBN鈥 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 鈥渆jemplar鈥 se forma a partir de la entidad 鈥淓jemplar鈥. 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 鈥淐ontiene鈥 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