Cita: la unica relacion que tiene esta tablas es cuando coincide el id (i.id_to = m.id_to). Ahora el problema que tengo es que si ese id no coincide no me muestra la informacion.
Eso es un comportamiento esperado.
SI en un registro de mensaje corresponde a un chat determinado, debe
obligatoriamente contener la FK de la otra tabla. Si no existe ningún mensaje referido a un determinado chat, es que ese chat no tuvo jamás mensajes.
Y si todo chat
tiene mensajes... entonces tienes un problema de diseño de procesos, porque no estás almacenando información consistente.
UN detalle: Para determinar si un chat no tuvo mensajes, se usa LEFT JOIN, como ya te dije, pero devolverá NULL en esos casos en la segunda tabla.
Ten en cuenta que no es lo mismo hablar de no existencia de relaciones constantes, que de
entidades débiles (tablas funcionalmente dependientes). Las primeras indican que no hay relación, la segunda que hay dependencia funcional.
Cita: Hace poco monte una bd y empece a poner las FOREIGN KEY pero cuando empece a insertar datos en la tablas me daba error porque como las tablas tenian FOREIGN KEY me obligaba a insertar datos en todas las tablas que esten relacionadas.
Eso es lo que se supone que debes hacer.
Puede que no tengas bien claro o la razón de la existencia de las FK o su impacto en las aplicaciones.
Una FK se usa para
generar una restricción al sistema que permita asegurar que la información es consistente, que no existe redundancia innecesaria, y que las dependencias entre tablas se respeta.
Ahora bien, desde el punto de vista de los procedimientos, la definición de FK en una tabla obliga a los desarrolladores a
respetar la cadena de dependencias, lo que a veces los programadores no quieren hacer. Pero eso
no significa que uno deba acceder a suspender las dependencias en aras de "facilitarle" el trabajo (y consecuentemente meter la pata) a los programadores. Ellos
tienen la obligación de respetar la consistencia de los datos, que es
crucial para los sistemas.
Entonces, la existencia de la FK se usa para asegurar, por ejemplo:
- Que no se pueda facturar un producto que no existe en el stock.
- Que no se imputen cargas sociales a empleados inexistentes.
- Que no se puedan cobrar impuestos que no corresponden por categoría impositiva.
- Que no ingreses el detalle de la factura, para una factura que no ingresó jamás.
- Un enorme, enorme, enorme, ENORME etcétera.
Cita: Siempre que hacer una relacion y empiezas a insertar datos tiene que insertar datos a todas las tablas relacionados????
Siempre.
Es parte fundamental del paradigma relacional implementado a nivel físico, que los valores a ingresar en un registro, en una columna que sea definida como FK,
deben existir previamente en la tabla referida.
Siempre.
Inevitablemente.
Obligatoriamente.
¿Queda claro el por qué?