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

Debo usar Tabla Recursiva?... con clave foranea?

Estas en el tema de Debo usar Tabla Recursiva?... con clave foranea? en el foro de Mysql en Foros del Web. Buenas a todos: Tengo varias cuestiones: Tengo una tabla PF con PK 'PF_ID'. Los registros corresponden a "estudiantes" 1.- Para poder hacer que un estudiante ...
  #1 (permalink)  
Antiguo 16/12/2005, 13:03
Avatar de prusian  
Fecha de Ingreso: diciembre-2005
Mensajes: 6
Antigüedad: 18 años, 3 meses
Puntos: 0
Debo usar Tabla Recursiva?... con clave foranea?

Buenas a todos:

Tengo varias cuestiones:

Tengo una tabla PF con PK 'PF_ID'. Los registros corresponden a "estudiantes"

1.- Para poder hacer que un estudiante dependa de uno o varios estudiantes (como jefes de grupo de estudio) debo, supongo, crear una tabla recursiva, no?

2.- Esa tabla recursiva TR debería tener al menos estos campos:
'PF_ID' - id del estudiante que se asocia un grupo
'PF2_ID' - id del estudiante que lidera un grupo
y ambas juntas deben ser la clave principal de la tabla TR
Es correcto?

3.- Si quiero mantener la integridad referencial debo indicar además que son claves foráneas y de qué tabla dependen?... en caso afirmativo:¿COMO?

4.- No pasa nada por tener nombres diferentes al de la tabla original, verdad?

5.- Si en phpmyadmin, por ejemplo, borro un registro de la tabla PF me borra todos los asociados en la tabla TR?... cómo lo haría si no?

Por favor,si no os importa, numerad las respuestas como las preguntas, que me lío mucho y soy muy zoquete.

Gracias a todos de antemano por vuestra paciencia con "petardos" como yo.

Última edición por prusian; 16/12/2005 a las 13:27 Razón: error en tituo
  #2 (permalink)  
Antiguo 16/12/2005, 13:29
 
Fecha de Ingreso: julio-2005
Ubicación: Mexico
Mensajes: 140
Antigüedad: 18 años, 8 meses
Puntos: 0
1. Si
2. No necesariamente, el jefe tendria PF2_ID = 'NULL' no?
3.
Código:
ALTER TABLE `TR` ADD KEY (`PF2_ID`); 
    
ALTER TABLE `TR` ADD FOREIGN KEY `PF2_ID` REFERENCES `TR` (`PF_ID`) ON UPDATE CASCADE ON DELETE CASCADE;

4. NO
5. No,

Código:
ALTER TABLE `TR` ADD KEY (`PF_ID`); 
    
ALTER TABLE `TR` ADD FOREIGN KEY `PF_ID` REFERENCES `PF` (`PF_ID`) ON UPDATE CASCADE ON DELETE CASCADE;

Saludos sudas ya sabes OK
__________________
SELECT * FROM LA_VIDA
  #3 (permalink)  
Antiguo 16/12/2005, 13:44
Avatar de prusian  
Fecha de Ingreso: diciembre-2005
Mensajes: 6
Antigüedad: 18 años, 3 meses
Puntos: 0
2.1.- La asociación de estudiantes y sus jefes se hace despues de un tiempo, con los estudiantes ya introducidos., Pero siempre que introduzcamos un valor PF_ID de estudiante ha de introducirse "a güevos" un valor para PF_ID de jefe de grupo.... Pero supongo que eso no es problema porque en la tabla pr introduzco los valores desde la aplicación y lo puedo controlar por código. ¿no es así?

3.1 Enmtiendo que en tu respuesta 3

ALTER TABLE `TR` ADD FOREIGN KEY `PF2_ID` REFERENCES `TR` (`PF_ID`) ON UPDATE CASCADE ON DELETE CASCADE;

quieres decir
ALTER TABLE `TR` ADD FOREIGN KEY `PF2_ID` REFERENCES `PF` (`PF_ID`) ON UPDATE CASCADE ON DELETE CASCADE;

NO? aunque a lo mejor me paso de listo......y la cago como de costumbre. Pero si no.... NO LO ENTIENDO.


Gracias igualmente... por la solucion...por la prontitud... y por responderme tan ordenadito.. .de verdad que así da gusto.
  #4 (permalink)  
Antiguo 16/12/2005, 13:57
 
Fecha de Ingreso: julio-2005
Ubicación: Mexico
Mensajes: 140
Antigüedad: 18 años, 8 meses
Puntos: 0
2.1 Quien seria el jefe del jefe, ¿él mismo?

3.1 Yo haria las dos:
Código:
ALTER TABLE `TR` ADD FOREIGN KEY `PF2_ID` REFERENCES `TR` (`PF_ID`) ON UPDATE CASCADE ON DELETE CASCADE;
Cuida la integridad de 'TR' en su relacion con si misma (segun yo);


Código:
ALTER TABLE `TR` ADD FOREIGN KEY `PF2_ID` REFERENCES `PF` (`PF_ID`) ON UPDATE CASCADE ON DELETE CASCADE;
Cuida la integridad de 'TR' en cuanto a su relacion con PF (segun yo)
Saludos
__________________
SELECT * FROM LA_VIDA
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 20:25.