Diferencia entre revisiones de «Practica1 - Apartado 5»

De FdIwiki ABD
Saltar a: navegación, buscar
(Página reemplazada por «{{#breadcrumb: }}»)
 
Línea 1: Línea 1:
 
{{#breadcrumb: }}
 
{{#breadcrumb: }}
 
=== '''APARTADO 5: Analiza la calidad de tu Base de Datos (OPCIONAL)''' ===
 
 
'''Para cada tabla determina: (antes, necesitas definir qué claves Primarias y Ajenas tiene):'''
 
 
CREATE TABLE '''Autor'''(
 
<br />
 
Id CHAR(50) not null,
 
<br />
 
Apellidos CHAR(50) not null,
 
<br />
 
Nombre CHAR(50) not null,
 
<br />
 
SegundoNombre CHAR(50),
 
<br />
 
PRIMARY KEY (Id)
 
<br />
 
);
 
 
CREATE TABLE '''Libro''' (
 
<br />
 
ISBN CHAR (50) not null,
 
<br />
 
Titulo CHAR (50) not null,
 
<br />
 
AÒoDePublicacion INTEGER not null,
 
<br />
 
Editorial CHAR(50) not null,
 
<br />
 
PRIMARY KEY (ISBN)
 
<br />
 
);
 
 
CREATE TABLE '''EsAutorDe'''(
 
<br />
 
Autor CHAR (50) not null,
 
<br />
 
Libro CHAR(50) not null,
 
<br />
 
PosicionEnPortada INTEGER not null,
 
<br />
 
PRIMARY KEY (Autor, Libro),
 
<br />
 
FOREIGN KEY (Libro) REFERENCES Libro (ISBN),
 
<br />
 
FOREIGN KEY (Autor) REFERENCES Autor (Id)
 
<br />
 
);
 
 
CREATE TABLE '''Materias'''(
 
<br />
 
Libro CHAR(50) not null,
 
<br />
 
Nombre CHAR(50) not null,
 
<br />
 
PRIMARY KEY (Libro, Nombre),
 
<br />
 
FOREIGN KEY (Libro) REFERENCES Libro (ISBN)
 
<br />
 
);
 
 
CREATE TABLE '''Copia'''(
 
<br />
 
Libro CHAR(50) not null,
 
<br />
 
NumeroDeCopia INTEGER not null,
 
<br />
 
Disponible CHAR(1) not null,
 
<br />
 
CHECK(Disponible IN ('S','N')),
 
<br />
 
PRIMARY KEY (Libro,NumeroDeCopia),
 
<br />
 
FOREIGN KEY (Libro) REFERENCES Libro (ISBN)
 
<br />
 
);
 
 
CREATE TABLE '''Ubicacion'''(
 
<br />
 
NumeroDeCentro INTEGER not null,
 
<br />
 
Telefono varchar(12) unique,
 
<br />
 
Direccion_Calle CHAR(50) not null,
 
<br />
 
Direccion_Numero INTEGER not null,
 
<br />
 
PRIMARY KEY (NumeroDeCentro)
 
<br />
 
);
 
 
CREATE TABLE '''Signatura'''(
 
<br />
 
Ubicacion INTEGER not null,
 
<br />
 
Copia INTEGER not null,
 
<br />
 
Libro CHAR(50) not null,
 
<br />
 
CodigoDeLocalizacion CHAR (20) not null,
 
<br />
 
PRIMARY KEY (Copia, Libro),
 
<br />
 
FOREIGN KEY (Libro, Copia) REFERENCES Copia (Libro, NumeroDeCopia),
 
<br />
 
FOREIGN KEY (Ubicacion) REFERENCES Ubicacion (NumeroDeCentro)
 
<br />
 
);
 
 
CREATE TABLE '''Usuario''' (
 
<br />
 
DNI CHAR(9) not null,
 
<br />
 
Nombre CHAR(50) not null,
 
<br />
 
Apellidos CHAR(50) not null,
 
<br />
 
PRIMARY KEY (DNI)
 
<br />
 
);
 
 
CREATE TABLE '''Bibliotecario'''(
 
<br />
 
DNI CHAR(9) not null,
 
<br />
 
NumeroDePersonal INTEGER UNIQUE not null,
 
<br />
 
Ubicacion INTEGER not null,
 
<br />
 
PRIMARY KEY (DNI),
 
<br />
 
FOREIGN KEY (DNI) REFERENCES Usuario (DNI),
 
<br />
 
FOREIGN KEY (Ubicacion) REFERENCES Ubicacion (NumeroDeCentro)
 
<br />
 
);
 
 
CREATE TABLE '''Estudiante'''(
 
<br />
 
DNI CHAR(9) not null,
 
<br />
 
CodigoDeExpediente CHAR(50) UNIQUE not null,
 
<br />
 
PRIMARY KEY (DNI),
 
<br />
 
FOREIGN KEY (DNI) REFERENCES Usuario (DNI)
 
<br />
 
);
 
 
CREATE TABLE '''Profesores'''(
 
<br />
 
Ubicacion INTEGER not null,
 
<br />
 
DNI char(9) not null,
 
<br />
 
Direccion_Calle char(50) not null,
 
<br />
 
Direccion_Numero Integer not null,
 
<br />
 
Telefono varchar(12) not null,
 
<br />
 
PRIMARY KEY (DNI),
 
<br />
 
FOREIGN KEY (DNI) REFERENCES Usuario (DNI),
 
<br />
 
FOREIGN KEY (Ubicacion) REFERENCES Ubicacion (NumeroDeCentro)
 
<br />
 
);
 
 
CREATE TABLE '''Multa'''(
 
<br />
 
DNI CHAR(9) not null,
 
<br />
 
FechaDeMulta TIMESTAMP not null,
 
<br />
 
DiasDeSancion INTEGER not null,
 
<br />
 
PRIMARY KEY (DNI, FechaDeMulta),
 
<br />
 
FOREIGN KEY (DNI) REFERENCES Usuario (DNI)
 
<br />
 
);
 
 
CREATE TABLE '''Prestamo'''(
 
<br />
 
Libro CHAR(50) not null,
 
<br />
 
Copia INTEGER not null,
 
<br />
 
FechaInicial TIMESTAMP not null,
 
<br />
 
FechaMaxima TIMESTAMP not null,
 
<br />
 
FechaDevolucion TIMESTAMP,
 
<br />
 
Usuario CHAR (9) not null,
 
<br />
 
UsuarioMultado CHAR (9) null,
 
<br />
 
FechaDeMulta TIMESTAMP null,
 
<br />
 
PRIMARY KEY (Usuario, Libro, Copia, FechaInicial),
 
<br />
 
FOREIGN KEY (Usuario) REFERENCES Usuario (DNI),
 
<br />
 
FOREIGN KEY (UsuarioMultado, FechaDeMulta) REFERENCES Multa (DNI, FechaDeMulta),
 
<br />
 
FOREIGN KEY (Libro, Copia) REFERENCES Copia (Libro, NumeroDeCopia)
 
<br />
 
);
 
 
==== '''5.1 En qué FN está? // 5.2 Es una calidad aceptable? // 5.3 Si no lo es: Vas a descomponer la tabla para que quede en una calidad adecuada.''' ====
 
 
'''AUTOR''': 3º FN. Si es una calidad aceptable porque esta en tercera forma normal, ya que todos
 
los atributos dependen de la clave primaria (Id).
 
<br />
 
 
'''BIBLIOTECARIO''': 3º FN. Si es una calidad aceptable porque esta en tercera forma normal, ya
 
que todos los atributos depende de la clave primaria (DNI).
 
<br />
 
 
'''COPIA''': 3º FN. Si es una calidad aceptable porque esta en tercera forma normal, ya que todos los
 
atributos dependen de las claves primarias (Libro, NumeroDeCopias).
 
<br />
 
 
'''ESAUTORDE''': 3º FN. Si es una calidad aceptable porque esta en tercera forma normal, ya que
 
todos los atributos dependen de las claves primarias (Autor, Libro).
 
<br />
 
 
'''ESTUDIANTE''': 3º FN. Si es una calidad aceptable porque esta en tercera forma normal, ya que
 
todos los atributos dependen de la clave primaria (DNI).
 
<br />
 
 
'''LIBRO''': 3º FN. Si es una calidad aceptable porque esta en tercera forma normal, ya que todos los
 
atributos dependen de la clave primaria (ISBN).
 
<br />
 
 
'''MATERIAS''': 3º FN. Si es una calidad aceptable porque esta en tercera forma normal, ya que
 
todos los atributos dependen de las claves primarias (Libro, Nombre).
 
<br />
 
 
'''MULTA''': 3º FN. Si es una calidad aceptable porque esta en tercera forma normal, ya que todos los
 
atributos dependen de las claves primarias (DNI, FechaDeMulta).
 
<br />
 
 
'''PRESTAMO''': En esta tabla aparecen varios atributos que son redundantes. El primero es
 
FechaDeMulta porque se puede conseguir este atributo mediante la FechaMaxima y la
 
FechaDevolucion, por lo que es un atributo innecesario, ademas no dependeria de todas las
 
claves por lo que podemos eliminarlo y crear un nuevo atributo en la tabla USUARIO que seria
 
NumeroDeDiasMultados con el que podremos saber el numero de dias que ese usuario tiene
 
multa. Pasa lo mismo con el atributo UsuarioMultado que podríamos sacar ese atributo con los
 
atributos FechaMaxima y FechaDevolucion por lo que igual que antes es un atributo que no
 
necesitamos en esta tabla por lo que para saber si un Usuario esta multado o no, podemos crear
 
en la tabla USUARIO un atributo que sea Multado en el que te indicara si ese usuario esta
 
multado. Con la creacion de estos dos atributos la tabla USUARIO seguiría estando en 3ºFN
 
porque los dos atributos dependeran de la clave DNI. Con los demás atributos la tabla estaria en
 
1ºFN porque existen atributos que no dependen de todas las claves por lo que para pasarlo a 2ºFN.
 
Crearíamos una nueva tabla con los atributos FechaMaxima, FechaInicial, Copia y Libro siendo la
 
clave primaria de esta una clave compuesta de FechaInicial, Copia y Libro. También creamos una
 
tabla con los atributos FechaDeDevolucion, Usuario, Libro, Copia siendo la clave primaria de esta
 
la clave compuesta de Usario, Libro, Copia. Ahora en la tabla original quedaria Libro, Copia, FechaInicial
 
y Usuario conservando su clave. De esta manera conseguimos poner la tabla en 2º y a su vez en 3ºFN porque
 
no existen dependencias transitivas.
 
<br />
 
 
'''PROFESORES''': 3º FN. Si es una calidad aceptable porque esta en tercera forma normal.
 
Suponiendo un mismo profesor solo puede trabajar en un centro, por lo que en ese caso todos los
 
atributos depende de la clave primaria (DNI).
 
<br />
 
 
'''SIGNATURA''': 2º FN. No es una calidad aceptable ya que esta en segunda forma normal y existen
 
atributos que depende transitivamente de las claves, por lo que para arreglarlo creariamos otra
 
tabla con atribtutos Ubicacion, CodigoDeLocalizacion siendo la clave primaria de esta Ubicacion.
 
La tabla SIGNATURA ahora solo tendria los atributos Ubacacion, Copia y Libro siendo una clave
 
compuesta Copia y Libro como antes, convirtiendo así la tabla en 3º FN ya que no existen
 
dependencias transitivas.
 
<br />
 
 
'''UBICACION''': 3º FN. Si es una calidad aceptable porque esta en tercera forma normal, ya que
 
todos los atributos dependen de la clave primaria (NumeroDeCentro).
 
<br />
 
 
'''USUARIO''': 3º FN. Si es una calidad aceptable porque esta en tercera forma normal, ya que todos
 
los atributos dependen de la clave primaria (DNI).
 
<br />
 
 
--[[Usuario:Kevin|Kevin]] ([[Usuario discusión:Kevin|discusión]]) 21:11 22 mar 2015 (CET)
 

Última revisión de 14:59 23 abr 2021