Ver Mensaje Individual
  #5 (permalink)  
Antiguo 05/05/2009, 07:07
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: 16 años, 5 meses
Puntos: 2658
Respuesta: ayuda urgente foreign key!!!

Aquí tienes un caso de dos tablas primarias con PK y una tabla secundaria con las 2 PK como PK y FK:
Código sql:
Ver original
  1. CREATE TABLE  `bases` (
  2.   `BASE_ID` INT(11) NOT NULL,
  3.   `BASE_NOMBRE` VARCHAR(50) DEFAULT NULL,
  4.   PRIMARY KEY  (`BASE_ID`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  6.  
  7. CREATE TABLE  `movil_identity` (
  8.   `PATENTE` VARCHAR(12) NOT NULL,
  9.   `INTERNO` VARCHAR(50) NOT NULL,
  10.   `MODELO` VARCHAR(30) NOT NULL,
  11.   `MARCA` VARCHAR(50) NOT NULL,
  12.   `FECHA_INI` DATE NOT NULL,
  13.   `FECHA_BAJA` DATE NOT NULL,
  14.   `ESTADO` VARCHAR(50) NOT NULL,
  15.   `PAIS` VARCHAR(50) NOT NULL,
  16.   `ULTIMO_VIAJE` INT(11) NOT NULL,
  17.   PRIMARY KEY  (`PATENTE`)
  18. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  19.  
  20. CREATE TABLE  `bases_moviles` (
  21.   `BASE_ID` INT(11) NOT NULL,
  22.   `PATENTE` VARCHAR(50) NOT NULL,
  23.   PRIMARY KEY  (`BASE_ID`,`PATENTE`),
  24.   KEY `BASE_ID` (`BASE_ID`),
  25.   KEY `PATENTE` (`PATENTE`),
  26.   CONSTRAINT `FK_Bases_Moviles_Movil_Identity` FOREIGN KEY (`PATENTE`) REFERENCES `movil_identity` (`PATENTE`),
  27.   CONSTRAINT `FK_Bases_Moviles_Bases` FOREIGN KEY (`BASE_ID`) REFERENCES `bases` (`BASE_ID`)
  28. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

El script está generado con MySQL Query Browser.
En este caso, la tercera tabla (que obviamente debe ser creada después de las otras dos, contiene solamente PK, nada más, porque precisamente esa es la función, controlar que cada par de PK solamente pueda aparecer una vez. Si puede darse que haya un par repetido, entonces, el sentido de esa tabla es incluir uno o más atributos que lo hacen distintivo. En ese caso ese tercer atributo o uno de ellos es una parte de la PK de esa tabla y tampoco puede repetirse la combinación de los tres.
Ese es el fundamento dado por el creador del modelo relacional para las relaciones N:N.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)