Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Foreign key referenciando 2 tablas

Estas en el tema de Foreign key referenciando 2 tablas en el foro de Bases de Datos General en Foros del Web. Buenas tardes, tengo las siguientes tablas Cita: create table table1 ( idTable1 integer not null primary key, nombre varchar(20) ); create table table2 ( idTable2 ...
  #1 (permalink)  
Antiguo 15/01/2015, 11:56
 
Fecha de Ingreso: junio-2012
Mensajes: 38
Antigüedad: 12 años, 5 meses
Puntos: 0
Foreign key referenciando 2 tablas

Buenas tardes, tengo las siguientes tablas

Cita:
create table table1 (
idTable1 integer not null primary key,
nombre varchar(20)
);

create table table2 (
idTable2 integer not null primary key,
nombre varchar(20)
);

create table table3 (
idTable3 integer not null primary key,
idReferencia integer,
nombre varchar(20),
tipo integer
);

El campo idReferencia de la table3 debe tener los Id de las tablas 1 o 2 y el campo tipo indica si debe buscar en la tabla1 o tabla2 al momento de hacer una consulta.

En otras palabras quiero saber si idRefencia puedo crearle dos foreing key a las Tablas 1 y 2 y busque segun el valor del campo Tipo, o necesariamente tengo que crear 2 campos con sus repectivas referencias y dejar un de los dos null cuando se cree un registro en la tabla3.
  #2 (permalink)  
Antiguo 15/01/2015, 12:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Foreign key referenciando 2 tablas

Una FK sólo puede apuntar a una única PK de una única tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 15/01/2015, 12:30
 
Fecha de Ingreso: junio-2012
Mensajes: 38
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Foreign key referenciando 2 tablas

Que es lo mas recomendable hacer en este caso.
  #4 (permalink)  
Antiguo 15/01/2015, 12:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Foreign key referenciando 2 tablas

Cita:
Iniciado por jaimeM Ver Mensaje
Que es lo mas recomendable hacer en este caso.
Y.. Lo primero es que nos expliques el caso real, y no una simulación teórica del tipo Tabla1, Tabla2, Tabla3, porque bien podría ser que las tablas estén incorrectament diseñadas y pudiera plantearse el esquema de otra forma.
Pero sin ver el contexto...

Normalmente existe algún tipo de relación conceptual entre entiades cuando se plantean casos como este, solo que están mal defindas las tablas. Y aprovechar esa relación es el método para llegar a un esquema correcto con consultas eficeitnes.

Postea los detales de las tablas y veremos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 15/01/2015, 13:03
 
Fecha de Ingreso: junio-2012
Mensajes: 38
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Foreign key referenciando 2 tablas

El caso real es que necesito hacer un recibo de caja, pero en este se puede pagar facturas o notas, las cuales están en tablas diferentes.

la tabla1 seria el detalle del recibo de caja donde se relacionan todos los documentos afectados, la tabla2 seria la relacion de facturas y la tabla3 seria la relacion de Notas del cliente.

espero ser claro y me puedan entender.
  #6 (permalink)  
Antiguo 15/01/2015, 13:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Foreign key referenciando 2 tablas

La verdad no se entiende mucho, ya que sólo tu sabes a que te refieres con "relacion de facturas", "relacion de Notas del Cliente" y demás.
desde el punto de vista de BBDD, esas tres "relaciones" podrían ser tres tablas o cerca de veinte. Son las tablas qlas que necesitamos entender, para ver qué tan bien representan las entidades que se supone qeisten en el sistema.

Usualmente una Factura se compone de al menos dos tablas, Caja relaciona enrte cinco y treinta tablas (el sistema de factuacion de la empresa donde trabajo maneja 52 tablas relacioandas con Caja), y "Notas" varias más.

En demfinitiva no se trata de algo simple.

Si lo que quieres es definir los asientos de Caja, dilo directamente.

En ese caso te comento que hay que diseñar mas detallado:
Definir los movimientos de caja (esa es una entidad), definir los tipos de movimiento (otra entidad), los documentos que aplican a un movimiento (otra entidad), y recién entonces puedes relacionar Caja con una FK.

Eso, claro, suponiendo que desees crear un sistema que funcione en el mundo real.

Por ejemplo los pagos (payments):


Esta parte del modelo contiene la referenica al origen de los pagos, comometodos de pagos, todos concentrados en una sola tabla.

...Y también las facturas (invoices):



Contiene las transacciones de pago, relacionadas con la caja.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 19/01/2015, 18:25
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Foreign key referenciando 2 tablas

Con permiso

Entiendo que las tablas FACTURA y NOTA, deberán llevar un campo ID_RECIBO_CAJA, que es el numero de recibo que liquida el importe, ya sea en la tabla FACTURA o NOTA.

Entonces, como no puedes hacer la relación (IDR), deberás colocar en las tablas de FACTURA y NOTA el campo de ID_RECIBO_CAJA, con la característica de NOT NULL

Y el procedimiento que "crea" el RECIBO DE CAJA, deberá crear el registro en cuestión, ya sea en FACTURA o NOTA.

¿Cierto?
__________________
MCTS Isaias Islas

Etiquetas: campos, key, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:04.