Practica1 - Apartado 5

De FdIwiki ABD
Revisión a fecha de 21:11 22 mar 2015; Kevin (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Plantilla:Please leave this line alone and write below (this is the coloured heading)

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

--Kevin (discusión) 21:11 22 mar 2015 (CET)