Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

ayuda urgente foreign key!!!

Estas en el tema de ayuda urgente foreign key!!! en el foro de Mysql en Foros del Web. hola tengo una duda y espero puedan ayudarme... tengo una base d datos .... y tengo varias tablas: tengo 2 tablas con sus respectivo pk.. ...
  #1 (permalink)  
Antiguo 04/05/2009, 14:55
 
Fecha de Ingreso: mayo-2009
Mensajes: 1
Antigüedad: 14 años, 11 meses
Puntos: 0
Información ayuda urgente foreign key!!!

hola tengo una duda y espero puedan ayudarme...
tengo una base d datos .... y tengo varias tablas:
tengo 2 tablas con sus respectivo pk..
Tengo una tabla q toma esas 2 y pasan a ser fk pero las pongo en esta tabla como pk... hasta aki todo bien, pero tengo una cuarta tabla y quiero mandar llamar esa pk de la 3ra tabla como fk pero (se puede???)¿¿¿?? como seria mi syntaxis????
si pudieran dejar un ejemplo lo agradeceria!!!!

tabla 1
pk x varchar(10)

tabla 2
pk y varchar(15)

tabla 3
pk(y,x)

fk x
fk y
tabla 4
fk---------pk de la tabla 3
  #2 (permalink)  
Antiguo 04/05/2009, 15:31
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ayuda urgente foreign key!!!

Yeahh

Lo que dices no tiene mucho sentido en la creación de tablas.
Fijate que si la tabla3 tiene las llaves de tabla1 y tabla2 quiere decir que entre estas tablas hay una relación n-m y que en esta tabla pueden haber muchos registros repetidos. No sería posible que esa misma tabla tuviera una primary key. A no ser que crearas otro campo id en tabla 3 que diferencie cada registro de la tabla y establecer la relación de tabla 3 con tabla4.

Si quieres nos cuentas un poco ms que tratas de hacer con un ejemplo practico en que se te presenta esta situación.

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 05/05/2009, 05:53
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: ayuda urgente foreign key!!!

Bueno, no exactamente, huesos.
Una tabla de segundo nivel como la que describe como TABLA3, es una tabla que controla la relación N:N entre dos tablas (recordemos que por definición, una relación N:N genera siempre una tabla). Esto significa que contiene las PK de las TABLA1 y TABLA2, pero no significa que existan tuplas repetidas con identicas PK1 y PK2, ya que en ese caso la combinación de ambas representa la PK de la tabla secundaria.
Dicho esto, entonces, una tabla de tercer nivel, dependiente de la TABLA 3 tendría como FK las dos claves de TABLA1 y TABLA2 (PK1,PK2), que como dije, representan la PK de TABLA3.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 05/05/2009, 06:40
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ayuda urgente foreign key!!!

No lo sabía gnzsoloyo...
Pero si me gustaría saber, como sería la sintaxis al momento de crear la tabla para que dos campos sean Foreign key y al mismo tiempo sean primary key compuesta.

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 05/05/2009, 07:07
Avatar de 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, 4 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)
  #6 (permalink)  
Antiguo 05/05/2009, 07:15
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ayuda urgente foreign key!!!

Gracias gnzsoloyo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 26/11/2009, 20:58
 
Fecha de Ingreso: septiembre-2009
Mensajes: 7
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: ayuda urgente foreign key!!!

Hola Tengo Una Duda Espero Me Puedan Responder Pero Me Urge De Verdad!, Mi Duda Es Que tengo 3 tablas,un Ejemplo Seria Que Tabla1 Este Realcionada Con la tabla 2 Donde Es Una Relacion (1,N), Lo Q Quiero Con Esto Es Q Me Den Un Ejemplo De Como crearia Las 3 Tablas Con Sus Foreign key Si Una Depende De la Otra Osea tabla1<-Tabla2<-tabla3, Es ComO Q Estuviera Diciendo Los Registros De La tabla 2 No Pueden Existir Si No Existe El Codigo De La Tabla1 Y Los Resgistros De La Tabla 3 No Pueden Existir Sino Existe el Cod De La Tabla1 Y Tabla2 No Se Si me Entienden:(
  #8 (permalink)  
Antiguo 26/11/2009, 21:20
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: ayuda urgente foreign key!!!

Cita:
Iniciado por chevito Ver Mensaje
Hola Tengo Una Duda Espero Me Puedan Responder Pero Me Urge De Verdad!, Mi Duda Es Que tengo 3 tablas,un Ejemplo Seria Que Tabla1 Este Realcionada Con la tabla 2 Donde Es Una Relacion (1,N), Lo Q Quiero Con Esto Es Q Me Den Un Ejemplo De Como crearia Las 3 Tablas Con Sus Foreign key Si Una Depende De la Otra Osea tabla1<-Tabla2<-tabla3, Es ComO Q Estuviera Diciendo Los Registros De La tabla 2 No Pueden Existir Si No Existe El Codigo De La Tabla1 Y Los Resgistros De La Tabla 3 No Pueden Existir Sino Existe el Cod De La Tabla1 Y Tabla2 No Se Si me Entienden:(
Cuesta un poco entenderte, pero la idea es tabla1<-Tabla2<-tabla3, tal como pones.
Si sabes establecer la relación de 1:N entre la tabla 1 y la 2, ¿cuál es tu problema en establecer la de la 2 a la 3? es exactamente lo mismo: la tabla 3 contiene una FK que es la PK de la tabla 2, y que es a su vez parte de la PK de la misma tabla 3.
¿Se entiende?

Si has creado la relación tabla1<-Tabla2, tu mismo puedes escribir la que falta...

¿Realmente necesitas un ejemplo?

Sería crear el SQL para algo así:
Tabla1(a, f, g, h)
Tabla2(a, b, i, j, k, l, m)
Tabla3(a, b, c, n, o, p, q, r, s)

Las claves van subrayadas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 27/11/2009, 15:41
 
Fecha de Ingreso: septiembre-2009
Mensajes: 7
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: ayuda urgente foreign key!!!

CREATE TABLE TABLA1(
COD INTEGER NOT NULL);

CREATE TABLE TABLA2(
COD_1 INTEGER NOT NULL,
COD_2 INTEGER NOT NULL);

CREATE TABLE TABLA3(
COD_2 INTEGER NOT NULL,
COD_3 INTEGER NOT NULL);

- Establesco Llaves Primarias Para Todas Las Tablas

ALTER TABLE TABLA1 ADD CONSTRAINT PKTABLA1 PRIMARY KEY(COD);

ALTER TABLE TABLA2 ADD CONSTRAINT PKTABLA2 PRIMARY KEY(COD_1,COD_2)

ALTER TABLE TABLA3 ADD CONSTRAINT PKTABLA3 PRIMARY KEY(COD_2,COD_3)

- Ahora Las Foraneas

ALTER TABLE TABLA2 ADD CONSTRAINT FK_TABLA2 FOREIGN KEY(COD_1) REFERENCES TABLA1(COD) ON UPDATE CASCADE ON DELETE CASCADE
- Hasta Aki no Hay Problemas Pero Ahora Este

ALTER TABLE TABLA3 ADD CONSTRAINT FK_TABLA3 FOREIGN KEY(COD_2) REFERENCES TABLA2(COD_2) ON UPDATE CASCADE ON DELETE CASCADE
Y Este Es El Error No Se Que Estoy Haciendo Mal Esa Es Mi Duda!

Unsuccessful metadata update.
Could not find UNIQUE or PRIMARY KEY constraint in table TABLA2 with specified columns.


Es Interbase, Pero Creo Q Ese No Es El problema jaja Sino Yo Q Debo Estar Estableciendo Algo Mal!, Espero Me Puedan Ayudar, Pero Es Q Es Primera Vez Q Se Me Presenta Algo Asi!
  #10 (permalink)  
Antiguo 27/11/2009, 15:49
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: ayuda urgente foreign key!!!

Una FK es un campo o conjunto de campos de una tabla que relacionan a esa tabla con otra a través de su clave primaria.
Eso está claro . ¿No?
Ahora bien, si una clave está compuesta por más de un campo, la FK también debe estar compuesta por más de un campo, de modo que correspondan en cantidad, tipo de columna y orden.
Ese es el error.

Siguiendo tu ejemplo:

Código sql:
Ver original
  1. -- Tabla1
  2. CREATE TABLE TABLA1(
  3. COD INTEGER NOT NULL);
  4.  
  5. -- Tabla2
  6. CREATE TABLE TABLA2(
  7. COD_1 INTEGER NOT NULL,
  8. COD_2 INTEGER NOT NULL);
  9.  
  10. -- Tabla3
  11. CREATE TABLE TABLA3(
  12. COD_1 INTEGER NOT NULL,
  13. COD_2 INTEGER NOT NULL,
  14. COD_3 INTEGER NOT NULL);
  15.  
  16. ALTER TABLE TABLA1
  17. ADD CONSTRAINT PKTABLA1 PRIMARY KEY(COD);
  18.  
  19. ALTER TABLE TABLA2
  20. ADD CONSTRAINT PKTABLA2 PRIMARY KEY(COD_1,COD_2);
  21.  
  22. ALTER TABLE TABLA3
  23. ADD CONSTRAINT PKTABLA3 PRIMARY KEY(COD_1,COD_2, COD_3);
  24.  
  25. ALTER TABLE TABLA2
  26. ADD CONSTRAINT FK_TABLA2 FOREIGN KEY(COD_1)
  27. REFERENCES TABLA1(COD)
  28. ON UPDATE CASCADE ON DELETE CASCADE;
  29.  
  30. ALTER TABLE TABLA3
  31. ADD CONSTRAINT FK_TABLA3 FOREIGN KEY(COD_1, COD_2)  
  32. REFERENCES TABLA2(COD_1, COD_2)
  33. ON UPDATE CASCADE ON DELETE CASCADE;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 27/11/2009 a las 15:54
  #11 (permalink)  
Antiguo 27/11/2009, 16:06
 
Fecha de Ingreso: septiembre-2009
Mensajes: 7
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: ayuda urgente foreign key!!!

Jajaja Q Facil nojoda!, Muchas Gracias!, De verdad!, Espero Poderte Ayudar Algun Dia!, Pero De verdad Gracias!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:26.