Ver Mensaje Individual
  #3 (permalink)  
Antiguo 05/01/2011, 06:57
kavalerian
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: Problema con claves ajenas

Gracias por responder pero no estoy del todo de acuerdo contigo:

1) Los campos declarados como AUTO_INCREMENT deben ser forzosamente PRIMARY KEY en MySQL, o al menos deben formar parte de ella. En tu caso, estás violando esta regla de MySQL en la tabla empresas y grupo_empresas, y usándolo mal en calendario_empresa


¿Por que deben ser PK? Está generado en MySQL y funciona correctamente, por tanto no lo considero una regla

En el primer caso, si pones un auto_increment, debe ser PK, caso contrario genera un error.


Ya hemos visto que no es así

En el segundo debes recordar que los valores tomados por los campos auto_increment son únicos en la tabla para cada registro, por lo que usarlos para una PK de varios campos no sólo carece de sentido, sino que puede permitir que varios registros distintos repitan los otros valores simplemente porque el AI no es el mismo, y no te olvides que una PK se evalúa en forma integral, no por el valor individual de sus campos.


Esto exactamente no lo entiendo muy bien. Evidentemente lo que estas diciendo nunca puede darse ya que cada campo tiene un nombre único

2) La sintaxis de un FOREIGN KEY es: FOREIGN KEY(campo/s) REFERENCES tabla origen(campos)
En tu caso no estás poniendo ni el REFERENCES ni el nombre de la tabla.


Esta sintaxis está copia de un export que he realizado de la bbdd. Está probada y funciona correctamente.
Como he puesto al final de código indico las dos formas que he utilizado para realizar la FK.

3) En referencia al diseño de labase propiamente dicho, me parece que no tienes claro el concepto de relaciones y dependencias, ...

El diseño está perfectamente claro:
Por un lado tenemos una tabla que se llama grupo_empresas, en esta podremos introducir los datos de una sociedad, cooperativa...
Esta tabla tiene un detalle Empresas, de la que cuelgan todas las empresas que tiene una cooperativa, estas pueden ser 1 o N.
De la tabla Empresas sale la tabla calendario_empresas que contendrá los días con las acciones que se realizaran. Como en un día pueden realizarse muchas acciones tendremos la tabla eventos en los que guardaremos todas las acciones que tengamos y que irá enlazada a la tabla calendario.

Aunque agradezco la explicación que me has hecho sobre mi trabajo no me has aclarado nada de lo que preguntaba.

Gracias por todo
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas