Diferencia entre revisiones de «Practica1 - Apartado 5»
(Página creada con «{{#breadcrumb: }} {{Please leave this line alone and write below (this is the coloured heading)}} === '''APARTADO 5: Analiza la calidad de tu Base de Datos (OPCIONAL)''' =...») |
|||
Línea 1: | Línea 1: | ||
{{#breadcrumb: }} | {{#breadcrumb: }} | ||
− | |||
=== '''APARTADO 5: Analiza la calidad de tu Base de Datos (OPCIONAL)''' === | === '''APARTADO 5: Analiza la calidad de tu Base de Datos (OPCIONAL)''' === |
Revisión de 22:14 22 mar 2015
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(
Id CHAR(50) not null,
Apellidos CHAR(50) not null,
Nombre CHAR(50) not null,
SegundoNombre CHAR(50),
PRIMARY KEY (Id)
);
CREATE TABLE Libro (
ISBN CHAR (50) not null,
Titulo CHAR (50) not null,
AÒoDePublicacion INTEGER not null,
Editorial CHAR(50) not null,
PRIMARY KEY (ISBN)
);
CREATE TABLE EsAutorDe(
Autor CHAR (50) not null,
Libro CHAR(50) not null,
PosicionEnPortada INTEGER not null,
PRIMARY KEY (Autor, Libro),
FOREIGN KEY (Libro) REFERENCES Libro (ISBN),
FOREIGN KEY (Autor) REFERENCES Autor (Id)
);
CREATE TABLE Materias(
Libro CHAR(50) not null,
Nombre CHAR(50) not null,
PRIMARY KEY (Libro, Nombre),
FOREIGN KEY (Libro) REFERENCES Libro (ISBN)
);
CREATE TABLE Copia(
Libro CHAR(50) not null,
NumeroDeCopia INTEGER not null,
Disponible CHAR(1) not null,
CHECK(Disponible IN ('S','N')),
PRIMARY KEY (Libro,NumeroDeCopia),
FOREIGN KEY (Libro) REFERENCES Libro (ISBN)
);
CREATE TABLE Ubicacion(
NumeroDeCentro INTEGER not null,
Telefono varchar(12) unique,
Direccion_Calle CHAR(50) not null,
Direccion_Numero INTEGER not null,
PRIMARY KEY (NumeroDeCentro)
);
CREATE TABLE Signatura(
Ubicacion INTEGER not null,
Copia INTEGER not null,
Libro CHAR(50) not null,
CodigoDeLocalizacion CHAR (20) not null,
PRIMARY KEY (Copia, Libro),
FOREIGN KEY (Libro, Copia) REFERENCES Copia (Libro, NumeroDeCopia),
FOREIGN KEY (Ubicacion) REFERENCES Ubicacion (NumeroDeCentro)
);
CREATE TABLE Usuario (
DNI CHAR(9) not null,
Nombre CHAR(50) not null,
Apellidos CHAR(50) not null,
PRIMARY KEY (DNI)
);
CREATE TABLE Bibliotecario(
DNI CHAR(9) not null,
NumeroDePersonal INTEGER UNIQUE not null,
Ubicacion INTEGER not null,
PRIMARY KEY (DNI),
FOREIGN KEY (DNI) REFERENCES Usuario (DNI),
FOREIGN KEY (Ubicacion) REFERENCES Ubicacion (NumeroDeCentro)
);
CREATE TABLE Estudiante(
DNI CHAR(9) not null,
CodigoDeExpediente CHAR(50) UNIQUE not null,
PRIMARY KEY (DNI),
FOREIGN KEY (DNI) REFERENCES Usuario (DNI)
);
CREATE TABLE Profesores(
Ubicacion INTEGER not null,
DNI char(9) not null,
Direccion_Calle char(50) not null,
Direccion_Numero Integer not null,
Telefono varchar(12) not null,
PRIMARY KEY (DNI),
FOREIGN KEY (DNI) REFERENCES Usuario (DNI),
FOREIGN KEY (Ubicacion) REFERENCES Ubicacion (NumeroDeCentro)
);
CREATE TABLE Multa(
DNI CHAR(9) not null,
FechaDeMulta TIMESTAMP not null,
DiasDeSancion INTEGER not null,
PRIMARY KEY (DNI, FechaDeMulta),
FOREIGN KEY (DNI) REFERENCES Usuario (DNI)
);
CREATE TABLE Prestamo(
Libro CHAR(50) not null,
Copia INTEGER not null,
FechaInicial TIMESTAMP not null,
FechaMaxima TIMESTAMP not null,
FechaDevolucion TIMESTAMP,
Usuario CHAR (9) not null,
UsuarioMultado CHAR (9) null,
FechaDeMulta TIMESTAMP null,
PRIMARY KEY (Usuario, Libro, Copia, FechaInicial),
FOREIGN KEY (Usuario) REFERENCES Usuario (DNI),
FOREIGN KEY (UsuarioMultado, FechaDeMulta) REFERENCES Multa (DNI, FechaDeMulta),
FOREIGN KEY (Libro, Copia) REFERENCES Copia (Libro, NumeroDeCopia)
);
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).
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).
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).
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).
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).
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).
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).
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).
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.
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).
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.
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).
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).