Tengo una duda acerca de como pasar de una relacion ternaria (en el modelo ER) a un conjunto de tablas. Haber Yo tengo 3 entidades:
Turno (idturno,dia,inicio,fin)
Usuario (idusuario,usuario,contrasena)
Red (idred)
La relación es que un usuario puede reservar una red durante un turno con la restricción de que solo puede realizar una unica reserva. Entonces yo he hecho lo siguiente:
Código SQL:
Ver original
CREATE TABLE usuario ( idusuario tinyint UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT, usuario VARCHAR(10) NOT NULL UNIQUE, contrasena VARCHAR(10) NOT NULL, administrador BOOLEAN NOT NULL DEFAULT 0, PRIMARY KEY (idusuario), UNIQUE INDEX (usuario,contrasena) )ENGINE=InnoDB; CREATE TABLE turno ( idturno tinyint UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT, dia tinyint UNSIGNED NOT NULL, inicio TIME NOT NULL, fin TIME NOT NULL, PRIMARY KEY (idturno), UNIQUE INDEX (dia,inicio) )ENGINE=InnoDB; CREATE TABLE red ( idred tinyint UNSIGNED NOT NULL UNIQUE, PRIMARY KEY (idred) )ENGINE=InnoDB; INSERT INTO red VALUES (1),(2),(3); CREATE TABLE reserva ( idusuario tinyint UNSIGNED NOT NULL UNIQUE, idturno tinyint UNSIGNED NOT NULL, idred tinyint UNSIGNED NOT NULL, PRIMARY KEY (idusuario), FOREIGN KEY (idusuario) REFERENCES usuario (idusuario) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (idred) REFERENCES red (idred) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (idturno) REFERENCES turno (idturno) ON DELETE CASCADE ON UPDATE CASCADE )ENGINE=InnoDB;
Mis dudas son:
-¿Es la forma correcta de hacerlo?
-¿Estaria en 3FN?
-La entidad de red no tiene mas atributos que el propio identificador ¿esta mál crear una tabla para ella? (No se me ocurre otra forma de hacerlo)
-De esta forma la primary key coincide con la foreign key: ¿Hay que definir ambas ose puede especificar la referencia en la primary key? (MySQL tiende a crearme indices con todo y acabo teniendolos repetidos)
Y ya que estoy aprovecho y pregunto una cosilla mas por si alguien sabe respondermelas:
-¿Con que cardinalidad se representaria cada una de las entidades en el diagrama ER? (Yo tengo puesto: turno-1, red-1, usuario-n)
Gracias de antemno ^^