Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Campo puede ser clave foranea de dos tabla (https://www.clubdelphi.com/foros/showthread.php?t=65992)

richy08 26-01-2010 17:05:46

Campo puede ser clave foranea de dos tabla
 
buenos dias les cuento una duda que me surgio jeje pero no se si se pueda hacer, es posible que un campo de una tabla sea clave foranea pero de dos tablas ejemplo:

tabla 1
id primary key
clave foreign key

tabla 2
clave2 primary key ....

tabla 3
clave3 primary key .........


lo que quiero hacer es que clave de la tabla1 sea una clave foranea tanto de clave2 tabla2 y clave3 tabla3 alguna ves me parece haber ledio que si se puede pero no esto seguro la duda es que al hacer un insert no tronara la integridad referencial saludos.

delphi.com.ar 26-01-2010 17:29:36

No entiendo la lógica de esto!.. normalmente cuando se normaliza una base de datos, un campo hace referencia a una tabla y si necesitas información de otra tabla, entonces debe estar en otro campo.
Por otro lado, dependiendo del motor, puedes usar triggers para validar cosas "raras", haciendo que estos produzcan un error si al insertar o modificar el valor del campo en cuestión, este no se encuentra en ninguna de las dos tablas.

¿Porque no nos cuentas brevemente un poquito de tu modelo de datos y porque llegas a esta necesidad?

Saludos!

richy08 26-01-2010 18:00:04

gracias por la respuesta a mi tambien se me hace bastante raro pero debido a los requerimientos queme hicieron pues no pienso cambiar toda la estructura por eso busco una solucion limpia y sencilla, esta base de datos pertenece a un resort ya saben de esos que rentan casas, originalmente solo los codigos de servicio se posteaban en la tabla que me presenta los problemas y los ratecodes y paquetes de noches estaban en otra tabla, ahora quieren que tambien los cargos de las noches aparezcan en la tabla de posteos es por eso la pregunta tabla1 es donde caen los cargos de la reserva tabla2 donde guardo los servicios que ofrecen y tabla3 ratecodes y paquetes ahora homologe los campos para que los dos caigan en tabla1 en el mismo campo, las soluciones que veo es quitar la integridad referencial de ese campo que no lo voy hacer por que los querys a la hora de querer borrar algo que ya esta posteado no lo permite por los eventos, laa otra que se me ocurre que todo se capture en la misma tabla y con banderas separar que tipo de servicio es ratecode o servicios que ofrecen y la tercera es insertarlso yo mismo a la hora de que den de alta un ratecode hacer un insert a la tabla y asi no perder la integridad referencial cual creen que seria la mejor solucion ???

Caro 26-01-2010 18:13:14

Hola richy08, si es llave primaria (un valor que no se repite), puedes tenerlo como llave foranea en las tablas que quieras, pero así como lo tienes, clave es otra llave foranea de otra tabla, por lo que puede repetirse dicho valor, si es así, si tendrías problemas. De la forma en que yo lo veo, es que tienes una relación de muchos a muchos, entre tabla1 y tabla2, lo mismo entre tabla1 y tabla3, para ello debes crearte una tabla intermedia con llaves foraneas de Tabla1(id) y Tabla2(clave2) y clave...

Saluditos

richy08 26-01-2010 18:38:54

gracias caro por la respuesta pero opte por hacer tabla2 y tabla3 una misma tabla, asies que revolvere records de servicios y room rates los cuales los filtrare en las subsecuentes pantallas con banderas indicando que tipo de servicio es, esto me costara revisar la aplicacion minuciosamente pero lo vale ya que no quiero problemas cuando el sistema este corriendo en sitio gracias a los dos :)


La franja horaria es GMT +2. Ahora son las 10:43:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi