Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/06/2014, 20:34
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: 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)