Ver Mensaje Individual
  #6 (permalink)  
Antiguo 26/02/2016, 12:06
ilos28
 
Fecha de Ingreso: noviembre-2015
Ubicación: Las Palmas (Canarias)
Mensajes: 14
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Problema con clave foranea

Cita:
Iniciado por Libras Ver Mensaje
Lo que pasa es que tu primer tabla tiene 2 campos como llave primaria y tu quieres hacer la FK solo usando un campo, ahora en las tablas que mandas veo algunas cosas:
Código MySQL:
Ver original
  1. create table proveedor (
  2. id_prove varchar(8) NOT NULL,
  3. nombre varchar(50),
  4. DNI varchar(10),
  5. cod_reparto int(5) NOT NULL,
  6. tipo_reparto varchar(50),
  7. fecha_entrega date,
  8. PRIMARY KEY (id_prove, cod_reparto)

Aqui porque la llave primaria es una llave compuesta? si en la segunda tabla tienes que cod_reparto sea una llave primaria no veo la necesidad de tener la llave compuesta en la primer tabla

Crea tu primer tabla solo con una llave primaria:


Código MySQL:
Ver original
  1. create table proveedor (
  2. id_prove varchar(8) NOT NULL,
  3. nombre varchar(50),
  4. DNI varchar(10),
  5. cod_reparto int(5) NOT NULL,
  6. tipo_reparto varchar(50),
  7. fecha_entrega date,
  8. PRIMARY KEY (id_prove)
Y despues crea la segunda tabla con la referencia que tienes y veras que ahora si va a funcionar :)
Cita:
Iniciado por gnzsoloyo Ver Mensaje
Antes que crear tablas tienes que definir las entidades del sistema.
Si un proveedor provee un sólo tipo de gas, pero ese tipo de gas puede ser provisto por mas de un proveedor tienes una relación 1:N entre ambos, y la FK de Gas va en Proveedor, y no al revés, pero a su vez esa FK NO ES parte de la PK. No confundir.
Si tu proveedor puede proveer más de un tipo de gas, la relación es N:M y requiere una tabla adicional. SI además puede cambiar a través del tiempo, la cosa se complica.

Empieza por definir las entidades del sistema, sus relaciones, y recién entonces podemos analizar como se deben implementar físicamente las mismas.

NO comiences con las paredes, sino con los cimientos.

Mi BBDD es un diseño de una Prisión. Además de las distintas relaciones entre el personal, los internos y demás, también existe una tabla con datos de los PROVEEDORES que proveen productos a la Prisión. Pero con eso que has dicho creo que me conviene más no crear la tabla GAS, ya que la forma en la que creé el diagrama E/R fue diseñando una jerarquía entre PROVEEDOR como supertipo y GAS, ALIMENTOS, MEDICINAS y ROPA como subtipo.

Esto lo hice en un principio porque pensé en crear una tabla específica para cada uno de los 4 tipos de repartos, pero si ya he creado PROVEEDOR con datos como "cod_reparto", "tipo_reparto" y "fecha_entrega" no veo necesario que exista otra tabla para lo mismo. Eso me parece que crea mucha redundancia.

Respecto al diagrama E/R lo llevo más o menos. Las cardinalidades que he puesto entre la tabla PROVEEDOR y PRISION es 1:N, porque en la Prisión proveen 1:N proveedores, mientras que un proveedor solo provee a 0:1 prisión.
Esto es porque esta Prisión, al ser ficticia, va a ser "construida" en una isla donde no existe ninguna...
Creo que lo he planteado bien, para lo que intento hacer. Pero aún soy muy novata en esto.