Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: jecavi20 en 4 Septiembre 2013, 01:24 am



Título: relacion de dos tablas
Publicado por: jecavi20 en 4 Septiembre 2013, 01:24 am
buenas noches tengo un problema de relaciones entre dos tablas y soy muy novato en el tema y espero que aqui me ayuden a resolverlo gracias de antemano

estoy haciendo un sistema de un censo donde las personas se registran con nombre apellido cedula y registran a sus familiares con sus nombre apellidos y su parentesco con el jefe familiar, tengo una tabla para el jefe familiar y otra para los parientes

la tabla del jefe familiar

id_jefefamiliar
cedula
nombre
apellido

y la tabla de los prientes

id_pariente
cedula
nombre
apellido
tipo_parentezco

pero no se como relacionarlos para que a la hora de la consulta se relacionen los parientes con su respectivo jefe familiar ya que los id de las dos tablas son autoincrementales y no se repiten, como podria hacer la relacion de un jefe familiar a muchos parientes

gracias de antemano por su colaboracion


Título: Re: relacion de dos tablas
Publicado por: Carloswaldo en 4 Septiembre 2013, 04:41 am
A mi se me ocurriría organizarlo de otra manera.

Teniendo una tabla de personas:

id_persona (PK)
cedula
nombre
apellido

(la cédula también podría ser el id, pues se supone que es único)

Y una tabla de relaciones familiares:

id_relacion (PK)
id_persona (FK a personas.id_persona)
id_familiar (FK a personas.id_persona)
tipo_relacion

Si es necesario saber si una persona es jefe familiar puedes agregar un campo tipo booleano a la tabla de personas (o el software determinaría si es jefe o no dependiendo de si tiene relaciones familiares asociadas a el)


Título: Re: relacion de dos tablas
Publicado por: jecavi20 en 4 Septiembre 2013, 07:03 am
gracias por responder amigo

pero es que me pidieron que hiciera una tabla de jefe familiar y otra de parientes y no se como hacerlo, me han dicho que use una tercera tabla para relacionarlos mediante los ID pero ni idea  :-\  necesito ayuda URGENTE!!


Título: Re: relacion de dos tablas
Publicado por: 1mpuls0 en 4 Septiembre 2013, 17:34 pm
Me voy más como lo propone Carloswaldo pero bueno.

La solución es muy simple.

"Un jefe familiar puede tener muchos parientes"

Entonces tendrías que agregar una llave foranea (fk) a la tabla de parientes.

Tabla: jefe_familiar
id_jefefamiliar
cedula
nombre
apellido

Tabla: parientes
id_pariente
fk_jefefamiliar
cedula
nombre
apellido
tipo_parentezco

Código
  1. SELECT * FROM jefe_familiar, parientes
  2. WHERE jefe_familiar.id_jefefamiliar=parientes.fk_jefefamiliar
  3.  

Saludos


Título: Re: relacion de dos tablas
Publicado por: jecavi20 en 4 Septiembre 2013, 20:08 pm
gracias

pero como haria para que cuando alguien se registre y registre a sus familiares se guarde el mismo valor del id_jefefamiliar en la otra tabla fk_jefefamiliar en cada una de las filias donde estan los datos de sus familiares, por que cuando van a registrar a los familiares sale el formulario para que llene todos lo datos de todos los familiares y se guarden todos al mismo tiempo


Título: Re: relacion de dos tablas
Publicado por: 1mpuls0 en 4 Septiembre 2013, 20:19 pm
Existen varias formas, pero depende de que herramientas (lenguaje de programación y sistema manajador de base de datos) utilices.


Título: Re: relacion de dos tablas
Publicado por: jecavi20 en 4 Septiembre 2013, 20:22 pm
estoy usando wampserver y phpmyadmin con lenguajes php html javascript ajax


Título: Re: relacion de dos tablas
Publicado por: 1mpuls0 en 4 Septiembre 2013, 23:22 pm
Entonces utiliza alguna de las siguientes funciones, puedes hacerlo tanto con php como con mysql.

php
mysqli_insert_id: Devuelve el id autogenerado que se utilizó en la última consulta
PDO::lastInsertId: Devuelve el ID de la última fila o secuencia insertada

mysql
LAST_INSERT_ID: Devuelve el último valor generado automáticamente que fue insertado en una columna AUTO_INCREMENT.

Con mysql también podrías obtener el id máximo aunque no te lo recomiendo.
SELECT MAX(id_tabla) AS id FROM tabla

Debes tener cuidado si tu aplicación es multiusuario porque dependiendo del caso hasta sería necesario utilizar LOCK TABLES, COMMIT, ROLLBACK.



http://www.php.net/manual/es/mysqli.insert-id.php
Citar
La función mysqli_insert_id() devuelve el ID generado por una consulta en una tabla con una columna que tenga el atributo AUTO_INCREMENT. Si la última consulta no fue una sentencia INSERT o UPDATE o si la tabla modificada no tiene una columna con el atributo AUTO_INCREMENT, está función devolverá cero.

El valor de la función de SQL LAST_INSERT_ID() de MySQL siempre contiene el valor AUTO_INCREMENT generado más recientientemente, y no se restablece entre consultas.


Título: Re: relacion de dos tablas
Publicado por: jecavi20 en 5 Septiembre 2013, 00:18 am
y estas funciones con php hirian en el archivo que guarda los valores en la base de datos?


Título: Re: relacion de dos tablas
Publicado por: 1mpuls0 en 5 Septiembre 2013, 00:42 am
Sí.

En el link que te pasé viene como se usa, no creas que te lo escribí por adornar el comentario.

http://php.net/manual/es/mysqli.insert-id.php
Código
  1. <?php
  2. $link = mysqli_connect("localhost", "mi_usuario", "mi_password", "world");
  3.  
  4. /* check connection */
  5. if (mysqli_connect_errno()) {
  6.    printf("Error de conexión: %s\n", mysqli_connect_error());
  7.    exit();
  8. }
  9.  
  10. mysqli_query($link, "CREATE TABLE myCity LIKE City");
  11.  
  12. $query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)";
  13. mysqli_query($link, $query);
  14.  
  15. printf ("Nuevo registro con el id %d.\n", mysqli_insert_id($link));
  16.  
  17. /* drop table */
  18. mysqli_query($link, "DROP TABLE myCity");
  19.  
  20. /* close connection */
  21. mysqli_close($link);
  22. ?>
  23.  

El valor que retorna mysqli_insert_id($link) lo guardas en una variable y la usas para insertar en la tabla de parientes.

Saludos.


Título: Re: relacion de dos tablas
Publicado por: jecavi20 en 5 Septiembre 2013, 01:22 am
ha ok y la variable con id la pondria en el insert into como si fuera un registro mas para que lo guarde con cada uno de los registros (osea en todas las filas) cierto??