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

clave foranea como clave primaria

Estas en el tema de clave foranea como clave primaria en el foro de Mysql en Foros del Web. Suponiendo que tengo las tablas: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original CREATE TABLE product (   category INT NOT NULL ,   id INT NOT ...
  #1 (permalink)  
Antiguo 14/06/2014, 20:00
 
Fecha de Ingreso: agosto-2010
Mensajes: 59
Antigüedad: 13 años, 8 meses
Puntos: 2
clave foranea como clave primaria

Suponiendo que tengo las tablas:
Código MySQL:
Ver original
  1. CREATE TABLE product (
  2.   category INT NOT NULL,
  3.   id INT NOT NULL,
  4.   price DECIMAL,
  5.   PRIMARY KEY(category, id)
  6.  
  7. CREATE TABLE customer (
  8.   id_customer INT NOT NULL,
  9.   PRIMARY KEY (id_customer)
Como crearía una tabla que tenga como clave primaria; la claves primaria de las dos tablas anteriores, es decir (category, id, id_customer).

Asi?, como le agrego la tabla customer en REFERENCE
Código MySQL:
Ver original
  1. CREATE TABLE product_order (
  2.   category INT NOT NULL,
  3.   id INT NOT NULL,
  4.   id_customer INT NOT NULL,
  5.   PRIMARY KEY ( category, id, id_customer)
  6. KEY ( category, id)
  7. KEY ( id_customer)
  8. FOREIGN KEY (category, id, id_customer) REFERENCES product (category, id)

Gracias.

Última edición por gnzsoloyo; 14/06/2014 a las 20:26 Razón: Mal etiquetado.
  #2 (permalink)  
Antiguo 14/06/2014, 20:34
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: clave foranea como clave primaria

No exactamente.
Estás planteando tres tablas, de las cuales una tiene FK aputando a cada una de las otras. Tu error es que piensas que es una FK y no es así, son dos FK, una apuntando a cada tabla.
¿Se entiende?

Además de eso, hay un error conceptual: Un producto tiene un ID, pero también una categoría. Pero diferentes productos pueden tener la misma categoría, lo que implica que la PK de esa tabla está mal definida. En la forma que la usas, puedes poner el mismo ID de producto con diferentes categorías, y no se notaría el falllo.
Lo que debes establecer es una tabla de categorías, y relacionarla con el prodcuto. Pero la PK del producto no debe contener la categoria.
Código MySQL:
Ver original
  1. CREATE TABLE categories (
  2.   category INT NOT NULL,
  3.   descripcion VARCHAR(100),
  4.   PRIMARY KEY (category)
  5.  
  6.  
  7. CREATE TABLE product (
  8.   id INT NOT NULL,
  9.   category INT NOT NULL,
  10.   price DECIMAL,
  11.   PRIMARY KEY(id),
  12.   FOREIGN KEY (categoria) REFERENCES categories (categoria)
  13.  
  14. CREATE TABLE customer (
  15.   id_customer INT NOT NULL,
  16.   PRIMARY KEY (id_customer)
  17.  
  18. CREATE TABLE product_order (
  19.   id INT NOT NULL,
  20.   id_customer INT NOT NULL,
  21.   PRIMARY KEY (id, id_customer)
  22. KEY ( id_customer)
  23. FOREIGN KEY (category, id, id_customer) REFERENCES product (category, id),
  24. FOREIGN KEY (id_customer) REFERENCES customer (customer_id)

Personalmente no entiendo lo que quieres hacer en la product_order, porque creo que tiene un diseño erroneo. Pero para decir más tendrías que explicar qué representa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 15/06/2014, 09:50
 
Fecha de Ingreso: agosto-2010
Mensajes: 59
Antigüedad: 13 años, 8 meses
Puntos: 2
Respuesta: clave foranea como clave primaria

No, nada que ver con el diseño conceptual, las tablas las saqué de la pagina de mysql. Solo quisiera saber como se crearía una tercera tabla que tenga como clave primaria las claves primarias de las dos tablas dadas.

Para que se entienda, en esta imagen:
La tabla Detallepedidos tiene como clave primaria las claves primarias de las otras dos tablas, entonces son claves foraneas y a la vez clave primaria(juntos), pero en el ejemplo que pongo al principio una de las tablas tiene clave primaria compuesta.

Última edición por daviss; 15/06/2014 a las 09:58 Razón: mas detalles
  #4 (permalink)  
Antiguo 16/06/2014, 13:40
 
Fecha de Ingreso: agosto-2013
Ubicación: Talca
Mensajes: 40
Antigüedad: 10 años, 7 meses
Puntos: 1
Respuesta: clave foranea como clave primaria

saludos amigo.
Me toco crear un sistema donde tenia 3 tablas: Paciente, enfermedad y detalleenfermedad.

Paciente: IDpaciente como PK
Enfermedad: IDEnfermedad como PK
Detalleenfermedad: IDPaciente e IDEnfermedad como PK (PK Compuesta).

Codigo SQL:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `detalleenfermedad` (
  2.   `IDpaciente` INTEGER unsigned NOT NULL,
  3.   `IDEnfermedad ` INTEGER unsigned NOT NULL,
  4.   `detalle_enfermedad` varchar(100) NOT NULL,
  5.   PRIMARY KEY (`IDpaciente`,`IDEnfermedad `)
Con esto validaba que el mismo paciente no tuviera la misma enfermedad dos veces.
El ejemplo es parecido a lo que andas buscando (creo).

Espero te sirva.

Última edición por gnzsoloyo; 16/06/2014 a las 14:10

Etiquetas: clave, null, primaria, tabla
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 18:22.