relacion de dos tablas

Iniciado por jecavi20, 4 Septiembre 2013, 01:24 AM

0 Miembros y 1 Visitante están viendo este tema.

jecavi20

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

Carloswaldo

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)

jecavi20

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!!

1mpuls0

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 (sql) [Seleccionar]

SELECT * FROM jefe_familiar, parientes
WHERE jefe_familiar.id_jefefamiliar=parientes.fk_jefefamiliar


Saludos
abc

jecavi20

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

1mpuls0

Existen varias formas, pero depende de que herramientas (lenguaje de programación y sistema manajador de base de datos) utilices.
abc

jecavi20

estoy usando wampserver y phpmyadmin con lenguajes php html javascript ajax

1mpuls0

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.
abc

jecavi20

y estas funciones con php hirian en el archivo que guarda los valores en la base de datos?

1mpuls0

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 (php-brief) [Seleccionar]

<?php
$link 
mysqli_connect("localhost""mi_usuario""mi_password""world");

/* check connection */
if (mysqli_connect_errno()) {
    
printf("Error de conexión: %s\n"mysqli_connect_error());
    exit();
}

mysqli_query($link"CREATE TABLE myCity LIKE City");

$query "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)";
mysqli_query($link$query);

printf ("Nuevo registro con el id %d.\n"mysqli_insert_id($link));

/* drop table */
mysqli_query($link"DROP TABLE myCity");

/* close connection */
mysqli_close($link);
?>



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

Saludos.
abc