Ver Mensaje Individual
  #12 (permalink)  
Antiguo 18/04/2014, 11:46
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: Problema al Relacionar Tablas MySQL

Sigues teniendo muchos problemas:
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `SistemaTLM`.`PermisosSystemTLM` (
  2.   `ID_Permiso` INT NOT NULL AUTO_INCREMENT,
  3.   `Usuario_ID` INT NOT NULL,
  4.   `ID_SubMenu` INT NOT NULL,
  5.   PRIMARY KEY (`ID_Permiso`))
Usuario_ID y ID_SubMenu deberían ser FK de sus tablas origen.
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `SistemaTLM`.`PanelControlSecciones` (
  2.   `ID_SubMenu` INT NOT NULL AUTO_INCREMENT,
  3.   `ID_Modulo` INT NOT NULL,
  4.   `NombreSeccion` VARCHAR(255) NULL,
  5.   `LinkSeccion` VARCHAR(255) NULL,
  6.   `ImagenSec` VARCHAR(255) NULL,
  7.   PRIMARY KEY (`ID_SubMenu`),
  8.   CONSTRAINT `fk_PanelControlSecciones_PermisosSystemTLM1`
  9.     FOREIGN KEY (`ID_SubMenu`)
  10.     REFERENCES `SistemaTLM`.`PermisosSystemTLM` (`ID_SubMenu`)
ID_Modulo debería ser FK de su tabla origen.
ID_SubMenu no puede ser FK si es una PK y autoincremental en esta tabla.
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `SistemaTLM`.`PanelControlModulos` (
  2.   `ID_Modulo` INT NOT NULL AUTO_INCREMENT,
  3.   `NombreModulo` VARCHAR(255) NULL,
  4.   `ImagenModulo` VARCHAR(255) NULL,
  5.   `LinkModulo` VARCHAR(255) NULL,
  6.   `innerModulo` VARCHAR(255) NULL,
  7.   PRIMARY KEY (`ID_Modulo`),
  8.   CONSTRAINT `fk_PanelControlModulos_PanelControlSecciones`
  9.     FOREIGN KEY (`ID_Modulo`)
  10.     REFERENCES `SistemaTLM`.`PanelControlSecciones` (`ID_Modulo`)
ID_Modulo no puede ser FK de otra tabla porque es autoincremental en esta.

En el caso de estas dos últimas tablas, estás creando una relación circular: La PK de la primera es FK de la segunda, donde su PK es FK de la primera.
Eso es una relación de imposible cumplimiento.

Si sigo adelante encuentro etos mismos problemas todo el tiempo...

Vamos al principio fundamental:

1) Toda tabla es como mínimo, la representación de una entidad del sistema.
2) Ciertas tablas son desagregaciones de una entidad por razones de normalización (Ver Formas Normales).
3) Ciertas tablas son producto de relaciones N:M (muchos a muchos), que obligatoriamente determinan la existencia de la tabla.

Y luego:

4) Toda tabla debe tener una clave primaria (PK).
5) Una clave primaria puede estar compuesta de un campo único, o de más de un campo, en tanto el grupo definido como PK sea de valores únicos para cada registro, para atributos en el mismo orden.
6) Un a clave foránea (FK) es un campo o conjunto de campos que referencia a la clave primaria de otra tabla, expresando una relación con esa tabla.
7) Una FK sólo puede tener por valores los valores que existan previamente en la tabla referenciada (donde esa clave es PK).
8) Una FK puede ser nula, si y sólo si la relación es opcional, y no mandatoria.
9) No pueden existir dependencias circulares.
10) Si una tabla hereda su clave de otra como FK (es PK y FK al mismo tiempo en su tabla), en la tabla dependiente no puede ser autoincremental. Esto por dos razones a) sus valores no se originan localmente, sino en la tabla referida, y b) una FK usualmente expresa una relación 1:N, donde la FK podría aparecer repetida, combinada con un discriminante, lo que rompería con su secuencialidad numérica.
11) Otras, muchas otras cosas mas....

Para limpiar un poco todo eso sería menester posiblemente borrar todas las relaciones y crearlas de nuevo, verificando qué es lo que se representa y cuáles son las dependencias funcionales entre las entidades.

La verdad es que sin conocer qué es lo que se trabaja, es un poco difícil.
¿Podrías describir sucintamente el sistema que estás modelando? ¿Qué hace, y qué entidades tiene?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)