Re: Como Puedo Relacionar Tablas En Mysql O Postgresql?
Lo que SQL te permite es relacionar las tablas con la cláusula JOIN
Por ejemplo:
Suponiendo que tu tabla de asesores sea así:
id numérico, clave primaria y única
nombre alfanumérico
y que contenga estos dos registros
1 Pepe Pérez Peluquero
2 Juan Nadie Gris
y la tabla asistencia sea así
id numérico clave primaria y única
asesor_id numerico (corresponde al id del asesor)
fecha campo de fecha y hora
duración tiempo que utilizó.
y que contenga los siguientes registros
1 1 20-10-2010 20 minutos
2 1 10-10-2010 30 minutos
3 2 01-10-2010 10 minutos
4 2 02-05-2009 15 minutos
Si pides algo así:
SELECT asesores.nombre, asistencias.fecha, asistencias.hora FROM asesores INNER JOIN asistencias ON asesores.id=asistencias.asesor_id WHERE year(asistencias.fecha) > 2009 ORDER BY asesores.nombre,asistencias.fecha
Obtendrás esto
Juan Nadie Gris 01-10-2010 10 minutos
Pepe Perez Peluquero 10-10-2010 30 minutos
Pepe Perez Peluquero 20-10-2010 20 minutos
SELECT va seguido de los campos (precedidos por el nombre de la tabla y un punto) que quieres ver.
FROM va seguido de las tablas que quieres usar
INNER JOIN establece el tipo de relación entre ellas (En este caso INNER hace que sólo salgan las filas cuyo campo de relación exista en las dos tablas)
WHERE va seguido de la condición de filtro de las filas resultantes (no sale la asistencia número 5 porque el año de su fecha no es mayor que 2009)
ORDER BY va seguido por los campos en los que quieres ordenar el resultado.
En esencia así se establece una relación entre dos tablas a la hora de consultar (por supuesto puede llegar a ser mucho más complejo si relacionamos más tablas y añadimos más condiciones).
El problema es que podemos borrar un asesor de la tabla, o que después de haber metido 100 asistencias de un asesor tengamos que cambiarle el id por cualquier motivo ¿qué pasa entonces con los registros de la tabla asistencias correspondientes a ese asesor?
Evidentemente podemos escribir en nuestro programa una serie de rutinas y funciones que se encarguen de borrar los registros relacionados, pero eso puede ser trabajoso, poco seguro y, además, no siempre borraremos o modificaremos registros desde el programa, muchas veces lo haremos con un gestor de base de datos, como phpmyadmin para bases mysql o el que lleva el propio
gambas.
¿Qué hacer entonces? Pues establecer lo que se llama "Integridad Referencial" en la propia base de datos (que no todas lo soportan, ojo)
Es decir, le decimos a la base de datos algo así como:
ALTER TABLE asistencias ADD FOREIGN KEY ( asesor_id ) REFERENCES asesores (id) ON DELETE CASCADE ON UPDATE CASCADE ;
Con esto le decimos que el campo asesor_id hace referencia (es clave externa) del campo id de la tabla asesores y que cuando se borre el registro o se actualice dicho campo se produzca un borrado o actualización "en cascada" en la tabla asistencias (es decir que se borren o actualicen todos los registros con ese asesor_id), sin que nosotros tengamos que preocuparnos más por el asunto.
¿Cómo puedes implementar todo esto en Mysql? (nunca he trabajado con postgre) pues eligiendo un tipo InnoDB para las tablas (por defecto son MyISAM, que no soporta la integridad referencial) y estableciendo las relaciones vía escribir las órdenes o utilizando un gestor de base de datos (recomiendo phpmyadmin que en sus últimas versiones permite hasta la creación gráfica de relaciones).
Básicamente este es el camino a seguir. Espero que te sirva de algo la información.
Suerte