Relación de Varias Tablas con Una Tabla

27/09/2007 - 09:58 por Elturle | Informe spam
Hola:

Tengo varias tablas como son: FacturasProveedores, Nóminas, Préstamos
y tengo otra tabla de Pagos. Entonces quiesiera saber si hay alguna
manera de poder relacionar las tres tablas de gastos con la de pagos,
para que cada registro en ellas tenga sus correspondientes pagos. La
relación sería de uno a varios. No se si es posible hacerlo o no.

Un Saludo.
Juan Carlos

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera (MVP)
27/09/2007 - 16:34 | Informe spam
Lea en los Books Online acerca de la cláusula REFERENCES de CREATE TABLE.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Elturle" wrote:

Hola:

Tengo varias tablas como son: FacturasProveedores, Nóminas, Préstamos
y tengo otra tabla de Pagos. Entonces quiesiera saber si hay alguna
manera de poder relacionar las tres tablas de gastos con la de pagos,
para que cada registro en ellas tenga sus correspondientes pagos. La
relación sería de uno a varios. No se si es posible hacerlo o no.

Un Saludo.
Juan Carlos


Respuesta Responder a este mensaje
#2 Enrique Catala Bañuls
27/09/2007 - 22:08 | Informe spam
Hola Carlos, lo que pides se puede hacer sin problemas, se llama clave agena
y se aplica desde la tabla de pagos , apuntando a la de Facturas, nominas y
préstamos

Seria algo así:
use TuBBDD
go
begin transaction

create table facturas (pkf int primary key ,... )
go
create table nominas ( pkn int primary key, ...)
go
create table prestamos (pkp int primary key ,...)
go
create table pagos (pkpp int primary key,
fk_pkf int FOREIGN KEY REFERENCES facturas(pkf) ,
fk_pkn int FOREIGN KEY REFERENCES nominas(pnk),
fk_pkp int FOREIGN KEY REFERENCES prestamos(pkp))
go

commit

Con esto lo que haces es que los pagos esten vinculando los datos a las
otras 3 tablas, evitando rendundancias y demás.

Salu2!
Atentamente, Enrique Catala Bañuls


"Elturle" wrote:

Hola:

Tengo varias tablas como son: FacturasProveedores, Nóminas, Préstamos
y tengo otra tabla de Pagos. Entonces quiesiera saber si hay alguna
manera de poder relacionar las tres tablas de gastos con la de pagos,
para que cada registro en ellas tenga sus correspondientes pagos. La
relación sería de uno a varios. No se si es posible hacerlo o no.

Un Saludo.
Juan Carlos


Respuesta Responder a este mensaje
#3 Alejandro Mesa
28/09/2007 - 02:16 | Informe spam
Hola Enrique,

Gracías por el interes.

El problema se da en que un pago se vincula solo con una de las tres tablas
y no con las tres al mismo tiempo. Un pago va a una factura o a una Nomina o
a un prestamo, pero no a los tres al mismo tiempo, si es que queremos usar
una unica tabla de pagos. Asi es como lo veo yo.

Claro esta que la informacion dada por "Elturle" no es suficiente como para
dar una sugerencia mas acertada. En este caso trataria de usar suptipos
disjuntivos (vaya nombre caray) y relacionar los subtipos con las tablas
principales. De esa forma podemos aceptar un unico pago, el cual puede estar
relacionado con un unico tipo o con cuantos tipos pueda cubrir, por ejemplo
si se pagan todos los tipos a la misma vez. Me explico mediante un modelo
fisico.

create table dbo.factura (
factura_id int not null primary key,
...
)

create table dbo.nomina (
nomina_id int not null primary key,
...
)

create table dbo.prestamo (
prestamo_id int not null primary key,
...
)

create table dbo.pago (
pago_id int not null primary key,
tipo char(1) not null check (tipo in ('F', 'N', 'P')),
fecha_pago datetime not null,
cantidad numeric(8, 2) not null,
unique (pago_id, tipo)
)

create table dbo.pago_factura (
pago_id int not null primary key,
tipo char(1) not null default 'F' check (tipo = 'F'),
factura_id int not null,
foreign key (pago_id, tipo) references dbo.pago(pago_id, tipo),
foreign key (factura_id) references dbo.factura(factura_id)
)

create table dbo.pago_nomina (
pago_id int not null primary key,
tipo char(1) not null default 'N' check (tipo = 'N'),
nomina_id int not null,
foreign key (pago_id, tipo) references dbo.pago(pago_id, tipo),
foreign key (nomina_id) references dbo.nomina(nomina_id)
)

create table dbo.pago_prestamo (
pago_id int not null primary key,
tipo char(1) not null default 'P' check (tipo = 'P'),
prestamo_id int not null,
foreign key (pago_id, tipo) references dbo.pago(pago_id, tipo),
foreign key (prestamo_id) references dbo.prestamo(prestamo_id)
)

Tendriamos que ver si en realidad se necesita el Supertipo [pago] en
dependencia de las caracteristicas propias que tenga el pago de cada tipo.
Este modelo se puede complicar si tratamos de modelar un pago que va a cubrir
multiples tipos, con lo cual tendriamos una cantidad_total que se distribuye
hacia la column [cantidad] de los tipos (columna que no inclui en el modelo
para hacerlo simple).

Seria bueno si alguien pudiera postear alguna otra idea.


AMB

"Enrique Catala Bañuls" wrote:

Hola Carlos, lo que pides se puede hacer sin problemas, se llama clave agena
y se aplica desde la tabla de pagos , apuntando a la de Facturas, nominas y
préstamos

Seria algo así:
use TuBBDD
go
begin transaction

create table facturas (pkf int primary key ,... )
go
create table nominas ( pkn int primary key, ...)
go
create table prestamos (pkp int primary key ,...)
go
create table pagos (pkpp int primary key,
fk_pkf int FOREIGN KEY REFERENCES facturas(pkf) ,
fk_pkn int FOREIGN KEY REFERENCES nominas(pnk),
fk_pkp int FOREIGN KEY REFERENCES prestamos(pkp))
go

commit

Con esto lo que haces es que los pagos esten vinculando los datos a las
otras 3 tablas, evitando rendundancias y demás.

Salu2!
Atentamente, Enrique Catala Bañuls


"Elturle" wrote:

> Hola:
>
> Tengo varias tablas como son: FacturasProveedores, Nóminas, Préstamos
> y tengo otra tabla de Pagos. Entonces quiesiera saber si hay alguna
> manera de poder relacionar las tres tablas de gastos con la de pagos,
> para que cada registro en ellas tenga sus correspondientes pagos. La
> relación sería de uno a varios. No se si es posible hacerlo o no.
>
> Un Saludo.
> Juan Carlos
>
>
Respuesta Responder a este mensaje
#4 Elturle
28/09/2007 - 08:58 | Informe spam
Muchas Gracias a Todos.

La idea es la que plantea Alejandro.De que un pàgo puede ser de la
tabla facturas o de la tabla nóminas o de la tabla préstamos.

También me han comentado (Fabel) en poner en la tabla pagos tres
claves foraneas, una para cada tabla y que permitan el valor nulo. Así
en cada registro dos claves foraneas serán nulas y una tendra el valor
para poder relacionarse con su tabla madre.

Un Saludo.
Juan Carlos

On 28 sep, 02:16, Alejandro Mesa
wrote:
Hola Enrique,

Gracías por el interes.

El problema se da en que un pago se vincula solo con una de las tres tablas
y no con las tres al mismo tiempo. Un pago va a una factura o a una Nomina o
a un prestamo, pero no a los tres al mismo tiempo, si es que queremos usar
una unica tabla de pagos. Asi es como lo veo yo.

Claro esta que la informacion dada por "Elturle" no es suficiente como para
dar una sugerencia mas acertada. En este caso trataria de usar suptipos
disjuntivos (vaya nombre caray) y relacionar los subtipos con las tablas
principales. De esa forma podemos aceptar un unico pago, el cual puede estar
relacionado con un unico tipo o con cuantos tipos pueda cubrir, por ejemplo
si se pagan todos los tipos a la misma vez. Me explico mediante un modelo
fisico.

create table dbo.factura (
factura_id int not null primary key,
...
)

create table dbo.nomina (
nomina_id int not null primary key,
...
)

create table dbo.prestamo (
prestamo_id int not null primary key,
...
)

create table dbo.pago (
pago_id int not null primary key,
tipo char(1) not null check (tipo in ('F', 'N', 'P')),
fecha_pago datetime not null,
cantidad numeric(8, 2) not null,
unique (pago_id, tipo)
)

create table dbo.pago_factura (
pago_id int not null primary key,
tipo char(1) not null default 'F' check (tipo = 'F'),
factura_id int not null,
foreign key (pago_id, tipo) references dbo.pago(pago_id, tipo),
foreign key (factura_id) references dbo.factura(factura_id)
)

create table dbo.pago_nomina (
pago_id int not null primary key,
tipo char(1) not null default 'N' check (tipo = 'N'),
nomina_id int not null,
foreign key (pago_id, tipo) references dbo.pago(pago_id, tipo),
foreign key (nomina_id) references dbo.nomina(nomina_id)
)

create table dbo.pago_prestamo (
pago_id int not null primary key,
tipo char(1) not null default 'P' check (tipo = 'P'),
prestamo_id int not null,
foreign key (pago_id, tipo) references dbo.pago(pago_id, tipo),
foreign key (prestamo_id) references dbo.prestamo(prestamo_id)
)

Tendriamos que ver si en realidad se necesita el Supertipo [pago] en
dependencia de las caracteristicas propias que tenga el pago de cada tipo.
Este modelo se puede complicar si tratamos de modelar un pago que va a cubrir
multiples tipos, con lo cual tendriamos una cantidad_total que se distribuye
hacia la column [cantidad] de los tipos (columna que no inclui en el modelo
para hacerlo simple).

Seria bueno si alguien pudiera postear alguna otra idea.

AMB



"Enrique Catala Bañuls" wrote:
> Hola Carlos, lo que pides se puede hacer sin problemas, se llama clave agena
> y se aplica desde la tabla de pagos , apuntando a la de Facturas, nominas y
> préstamos

> Seria algo así:
> use TuBBDD
> go
> begin transaction

> create table facturas (pkf int primary key ,... )
> go
> create table nominas ( pkn int primary key, ...)
> go
> create table prestamos (pkp int primary key ,...)
> go
> create table pagos (pkpp int primary key,
> fk_pkf int FOREIGN KEY REFERENCES facturas(pkf) ,
> fk_pkn int FOREIGN KEY REFERENCES nominas(pnk),
> fk_pkp int FOREIGN KEY REFERENCES prestamos(pkp))
> go

> commit

> Con esto lo que haces es que los pagos esten vinculando los datos a las
> otras 3 tablas, evitando rendundancias y demás.

> Salu2!
> Atentamente, Enrique Catala Bañuls

> "Elturle" wrote:

> > Hola:

> > Tengo varias tablas como son: FacturasProveedores, Nóminas, Préstamos
> > y tengo otra tabla de Pagos. Entonces quiesiera saber si hay alguna
> > manera de poder relacionar las tres tablas de gastos con la de pagos,
> > para que cada registro en ellas tenga sus correspondientes pagos. La
> > relación sería de uno a varios. No se si es posible hacerlo o no.

> > Un Saludo.
> > Juan Carlos- Ocultar texto de la cita -

- Mostrar texto de la cita -
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida