Ver Mensaje Individual
  #4 (permalink)  
Antiguo 07/10/2009, 08:53
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ¿En cual de las dos tablas deberia de poner la clave foranea?

Si y no. No es ortodoxo, pero no es completamente erróneo.
La regla de las FK dice que entre dos tablas con una cardinalidad 1:1, se puede poner el campo FK en cualquiera de las dos, pero sólo en una.
El problema es conceptual: En este modelo:
Código sql:
Ver original
  1. CREATE TABLE USER (
  2.   id BIGINT AUTO_INCREMENT,
  3.   username TEXT,
  4.   password TEXT,
  5.   contact_id BIGINT,
  6.   INDEX contact_id_idx (contact_id),
  7.   PRIMARY KEY(id)) ENGINE = INNODB;
  8. CREATE TABLE contact (
  9.   id BIGINT AUTO_INCREMENT,
  10.   first_name TEXT,
  11.   last_name TEXT,
  12.   phone TEXT,
  13.   email TEXT,
  14.   address TEXT,
  15.   PRIMARY KEY(id)) ENGINE = INNODB;
  16.  
  17. ALTER TABLE USER
  18.     ADD FOREIGN KEY (contact_id)
  19.     REFERENCES contact(id);
El contacto existe antes que el usuario. Eso sólo tiene sentido en el contexto de un determinado modelo de sistema que requiera, por ejemplo, que un usuario haya entrado antes como contacto, para permitirle ser usuario.
Eso, desde el vamos, depende de las reglas del negocio, por lo que es algo que el Analista tiene que estipular.

Hay, de todos modos un problema en el modelo: Está usando palabras reservadas para los nombres de campos, lo que puede hacer que a la hora de las consultas se generen errores casi indetectables.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)