Ver Mensaje Individual
  #3 (permalink)  
Antiguo 26/09/2010, 08:20
Bliztz
 
Fecha de Ingreso: agosto-2009
Mensajes: 15
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Relacion ternaria -> base de datos

En su momento me plantee el crear un dominio con idred, pero MySQL no permite crear dominios ^^U,

Haber yo podria por un lado añadir la idred como atributos a la relacion reserva y de tal manera que quedara:

Código SQL:
Ver original
  1. CREATE TABLE reserva
  2. (
  3. idusuario   tinyint UNSIGNED NOT NULL UNIQUE,
  4. idturno     tinyint UNSIGNED NOT NULL,
  5. idred       tinyint UNSIGNED NOT NULL,
  6. PRIMARY KEY (idusuario),
  7. FOREIGN KEY (idusuario) REFERENCES usuario (idusuario) ON DELETE CASCADE ON UPDATE CASCADE,
  8. FOREIGN KEY (idturno) REFERENCES turno (idturno) ON DELETE CASCADE ON UPDATE CASCADE
  9. UNIQUE INDEX (idturno,idred)
  10. )ENGINE=InnoDB;

La cuestión es que tengo otra relación (que se me olvido mencionar) entre usuario y red que es activo, es decir una tabla tal que así:

Código SQL:
Ver original
  1. CREATE TABLE activo
  2. (
  3. idusuario   tinyint UNSIGNED NOT NULL UNIQUE,
  4. idred   tinyint UNSIGNED NOT NULL UNIQUE,
  5. inicio      datetime NOT NULL,
  6.  
  7. PRIMARY KEY (idusuario,idred),
  8. FOREIGN KEY (idusuario) REFERENCES usuario (idusuario) ON DELETE CASCADE ON UPDATE CASCADE,
  9. FOREIGN KEY (idred) REFERENCES red (idred) ON DELETE CASCADE ON UPDATE CASCADE
  10. )ENGINE=InnoDB;

donde almaceno (y puedo comprobar mas tarde) si una red se encuentra acutalmente en uso, y en caso afimativo, que usuario esta en ella y desde cuando.

En esta tabla podria hacer lo mismo y pasar idred como atributo de la relación. La cuestión es que la cosa no me queda clara del todo ya que al eliminar red como entidad esta relación queda un poco descolgada (no se si me explico). Ademas idred aquí y en la otra tabla referencian lo mismo, pero sin una tabla red no tengo manera de relacionarlas ¿no?

Quizas combinar las tablas red y activo sea otra opción, pero de hacer eso la tabla resultante ¿seguiria estando en 3FN?, ademas como la red no esta siempre en uso el atributo datetime no siempre tiene sentido en la tabla.

Nose, ¿que hariais vosotros?

P.D.: El interes en tener la base de datos normalizada no es cosa mia, sino que todo esto forma parte de un PFC y el tutor asi lo ha querido, entoces o estan totalmente normalizadas o encuentro una explicació bonita y convicenten que poder plantar en la memoria ^^U