Solución Práctica 1 Apartado Opcional

De FdIwiki ABD
Saltar a: navegación, buscar

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

== 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 ya que esta en tercera forma normal. Todos los atributos dependen de la clave primaria(Id)

BIBLIOTECARIO: 3º FN. Si es una calidad aceptable ya que esta en tercera forma normal. Todos los atributos dependen de la clave primaria (DNI)

COPIA: 3º FN. Si es una calidad aceptable ya que esta en tercera forma normal. Todos los atributos dependen de la clave primaria (Libro,NumCopia).

ESAUTORDE: 3º FN. Si es una calidad aceptable ya que esta en tercera forma normal. Todos los atributos dependen de la clave primaria (Autor, Libro).

ESTUDIANTE: 3º FN. Si es una calidad aceptable ya que esta en tercera forma normal. Todos los atributos dependen de la clave primaria(DNI).

LIBRO: 3º FN. Es una calidad aceptable ya que esta en Tercera forma normal. Todos los atributos dependen de la clave primaria.

MATERIAS: 3º FN. Si es una calidad aceptable ya que esta en tercera forma normal. Todos los atributos dependen de la clave primaria(Libro, Nombre)

MULTA: 3º FN. Si es una calidad aceptable ya que esta en tercera forma normal(DNI, FechaDeMulta).

PRESTAMO: FECHAMAX->FEC_INI USUARIO, LIBRO, FECHAINICIAL->FECHADEV USUARIOMULTADO->USUARIO

Observamos que hay atributos redundantes como son USUARIOMULTADO que depende de USUARIO. Para evitar esta redundancia, podríamos eliminar esta columna y añadir en la tabla USUARIO un atributo que sea USUARIOMULTADO (s/n). Además FECHAMULTA siempre será un día más que FECHAMAXIMA también podríamos eliminar este atributo. Para calcular si un usuario está multado o se podría mirar si la FECHADEVOLUCION es mayor que la FECHAMAXIMA. Aplicando estos cambios vemos que la tabla queda en 1º FN ya que FechaMaxima no depende de toda la clave principal si no solo de FECHAINICIAL. Para solucionarlo: Crearíamos una tabla con LIBRO, COPIA, FECHAINICIAL, FECHAMAXIMA con clave primaria LIBRO,COPIA y FECHAINICIAL y otra tabla con USUARIO, LIBRO,COPIA, FECHADEVOLUCION, con clave (USUARIO, LIBRO, COPIA). Así ya estarían en 3ºFN.


PROFESORES: 3º FN. Si es una calidad aceptable ya que esta en tercera forma normal. Todos los atributos que no forman parte de la clave primaria DNI, dependen directamente de él. Suponemos que los profesores solo pueden trabajar en una dirección concreta.

SIGNATURA: 2º FN No es una calidad aceptable ya que esta en segunda forma normal. Vemos que hay una dependencia funcional transitiva: CódigoDeLocalizacion (que interpreto que es el código del edificio) depende transitivamente de la clave primaria a través de UBICACION. Para arreglarlo crearíamos otra tabla con atributos Ubicacion, CodigoDeLocalizacion siendo la clave primaria de esta Ubicacion. La tabla SIGNATURA ahora solo tendría los atributos Ubacacion, Copia y Libro siendo una clave compuesta Copia y Libro como antes.

UBICACION: 3º FN. Si es una calidad aceptable ya que esta en tercera forma normal. Todos los atributos dependen de la clave primaria (NumeroDeCentro).

USUARIO: 3º FN. Si es una calidad aceptable ya que esta en tercera forma normal.Todos los atributos dependen de la clave primaria (DNI)

--Christian Álvarez Sánchez (discusión) 19:10 20 abr 2015 (CEST)