UNIQUE

08/01/2007 - 00:54 por Mickro | Informe spam
Hola a atodos, tengo una duda:

Tengo dos tablas:

tblPagos

[IDPago] (PK)
[Tipo]
[IDOrden]

tblOrdenes

[IDOrden] (PK)
[Numero]


En mi programa, primero guardo los datos de la tabla tblOrdenes para obtener
los datos de la columna IDOrden.
Entonces, una vez que tengo los IDOrden, actualizo mi DataSet tblPagos con
los IDOrden que hasta ahora eran NULL. Se entiende?

Pero, leyendo un libro de SQL Server que compre, veo que puedo hacerlo de
una mejor manera.


Tengo que crear una restriccion UNIQUE en la columna IDOrden de la tabla
tblPagos, entonces creo una relacion con la columna
IDOrden de la tabla tblOrdenes, de manera de que con la verificacion de
integridad referencial se actualizara el valor de la
columna IDOrden de la tabla tblPagos. Pero tengo el problema de que en la
tabla tblPagos alguna veces el valor de IDOrden puede ser NULL. Entonces
no puedo crear una restriccion UNIQUE.

Se ha ocurrido utilizar TRIGGERS.

QUe me recomiendan ustedes??

GRACIAS!

Saludos

Preguntas similare

Leer las respuestas

#11 Mickro
08/01/2007 - 20:19 | Informe spam
La PK de tblOrdenes tendrian que ser las columnas IDPago y Numero??


"Jose Mariano Alvarez"
escribió en el
mensaje news:
Si no tengo pagos parciales haria algo parecido a esto.


/* Create new table "tblOrdenes". */
/* "tblOrdenes" : Table of tblOrdenes */
/* "Numero" : Numero identifies tblOrdenes */
/* "IdPago" : IdPago is of tblOrdenes */
/* "Importe" : Importe is of tblOrdenes */
create table "tblOrdenes" (
"Numero" char(10) not null,
"IdPago" char(10) null,
"Importe" char(10) null)

go

alter table "tblOrdenes"
add constraint "tblOrdenes_PK" primary key ("Numero")


go

/* Create new table "tblPagos". */
/* "tblPagos" : Table of tblPagos */
/* "IdPago" : IdPago identifies tblPagos */
/* "MontoEfectivo" : MontoEfectivo is of tblPagos */
create table "tblPagos" (
"IdPago" char(10) not null,
"MontoEfectivo" char(10) null)

go

alter table "tblPagos"
add constraint "tblPagos_PK" primary key ("IdPago")


go

/* Create new table "tblDetalleVentas". */
/* "tblDetalleVentas" : Table of tblDetalleVentas */
/* "IdVenta" : IdVenta identifies tblDetalleVentas */
/* "IdProducto" : IdProducto is of tblDetalleVentas */
/* "Cantidad" : Cantidad is of tblDetalleVentas */
/* "Precio" : Precio is of tblDetalleVentas */
create table "tblDetalleVentas" (
"IdVenta" char(10) not null,
"IdProducto" char(10) null,
"Cantidad" char(10) null,
"Precio" char(10) null)

go

alter table "tblDetalleVentas"
add constraint "tblDetalleVentas_PK" primary key ("IdVenta")


go

/* Create new table "TBLProductos". */
/* "TBLProductos" : Table of TBLProductos */
/* "IdProducto" : IdProducto identifies TBLProductos */
/* "Descripcion" : Descripcion is of TBLProductos */
create table "TBLProductos" (
"IdProducto" char(10) not null,
"Descripcion" char(10) null)

go

alter table "TBLProductos"
add constraint "TBLProductos_PK" primary key ("IdProducto")


go

/* Create new table "tblVentas". */
/* "tblVentas" : Table of tblVentas */
/* "IdVenta" : IdVenta identifies tblVentas */
/* "Fecha" : Fecha is of tblVentas */
/* "IdPago" : IdPago is of tblVentas */
create table "tblVentas" (
"IdVenta" char(10) not null,
"Fecha" char(10) null,
"IdPago" char(10) null)

go

alter table "tblVentas"
add constraint "tblVentas_PK" primary key ("IdVenta")


go

/* Add foreign key constraints to table "tblOrdenes". */
alter table "tblOrdenes"
add constraint "tblPagos_tblOrdenes_FK1" foreign key (
"IdPago")
references "tblPagos" (
"IdPago") on update no action on delete no action

go

/* Add foreign key constraints to table "tblDetalleVentas". */
alter table "tblDetalleVentas"
add constraint "tblVentas_tblDetalleVentas_FK1" foreign key (
"IdVenta")
references "tblVentas" (
"IdVenta") on update no action on delete no action

go

alter table "tblDetalleVentas"
add constraint "TBLProductos_tblDetalleVentas_FK1" foreign key (
"IdProducto")
references "TBLProductos" (
"IdProducto") on update no action on delete no action

go

/* Add foreign key constraints to table "tblVentas". */
alter table "tblVentas"
add constraint "tblPagos_tblVentas_FK1" foreign key (
"IdPago")
references "tblPagos" (
"IdPago") on update no action on delete no action

go


/* This is the end of the Microsoft Visual Studio generated SQL DDL
script. */





Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Mickro" wrote in message
news:
Me voy a explicar mejor.

Tengo un negocio en el cual ademas de recibir pagos en efectivo, tambien
recibo ordenes de compra que expide un sindicato por un cierto valor. Por
ejemplo, un cliente puede venir a comprar a mi negocio con una Orden de
Compra de $ 10,00 o sea, tiene $ 10,00 para gastar en mi negocio, a fin
de mes yo le cobro esos $ 10 pesos al sindicato correspondiente.

Tambien puede darse el caso en el que el cliente puede pagarme con, por
ejemplo, 2 Ordenes de Compra cada una de $ 5,00 (que en total harian $
10,00). Pero yo debe ingresar en mi programa las dos ordenes por
separado. No puedo sumarlas he ingresar una sola Orden de $ 10,00.

Tambien puede darse el caso en el que el Total de la venta sea de $ 15,00
y el cliente me pague con una Orden de Compra de $ 10,00 y el resto me
pague en efectivo (o sea $ 5,00 en efectivo).

Tambien, el cliente puede pagar el total de la compra solamente en
Efectivo o solamente con Ordenes de Compra.

En el caso en que el pago de la venta sea solamente en Efectivo, el valor
de IDOrden de la tabla tblPagos queda NULL.

En base a esto diseñe estas tablas

tblVentas

[IDVenta] (PK)
[Fecha]

tblDetalleVentas

[IDVenta] (FK)
[Codigo] (PK) > ' Codigo de barras del producto vendido
[Cantidad]
[Precio]
[Importe]
[IDPago] (FK)

tblPagos

[IDPago] (PK)
[Tipo] ==> ' Puede ser "Efectivo" o "Orden"
[Monto] ==> ' Cantidad de Efectivo que recibo o Monto de la Orden
[IDOrden]

tblOrdenes

[IDOrden] (PK)
[Numero] == > Numero de la Orden, es un valor unico, no pueden haber
dos ordenes con el mismo numero

Esta bien este diseño? Se puede crear una relacion entre la tabla
tblPagos y la tabla tblOrdenes?

Muchas Gracias por su Ayuda!





"Jose Mariano Alvarez"
escribió en el
mensaje news:
Podrias explicarnos por que precisas que el pago tenga un indice unico
sobre la columna IDOrden.





Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Mickro" wrote in message
news:
Hola..

"Te conviene crear un FK en pagos en la columna IDOrden que referencie
la PK
de la tabla ordenes."

Hice esto, pero el problema que tengo es que en la tabla tblPagos
algunas veces puedo asentar un pago en el que la columna IDOrden quede
NULL. Entonces me tira este error :

CREATE UNIQUE INDEX terminated because a duplicate key was found for
object name 'dbo.tblPagos' and index name 'IX_tblPagos'. The duplicate
key value is (<NULL>).
Could not create constraint. See previous errors.
The statement has been terminated.

Ya tengo pagos asentados en la tabla tblPagos y en muchos la columna
IDOrden esta NULL. Solamente hay un dato cuando el pago es realizado
con un documento que yo llamo "Orden de Compra".

Saludos



"Jose Mariano Alvarez"
escribió en el
mensaje news:
Debes insertar la orden, Luego insertar el pago, con el IDOrden o con
null, en cuyo caso luego debes hacer un Update en la tabla de pagos
para actualizar este valor.

La actualizacion en cascada no tiene sentido porque no cambias la
orden sino que actualizas el campo de la orden en la tabla de pagos. .

Te conviene crear un FK en pagos en la columna IDOrden que referencie
la PK de la tabla ordenes.

Saludos



Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Mickro" wrote in message
news:ucPx$
Hola a atodos, tengo una duda:

Tengo dos tablas:

tblPagos

[IDPago] (PK)
[Tipo]
[IDOrden]

tblOrdenes

[IDOrden] (PK)
[Numero]


En mi programa, primero guardo los datos de la tabla tblOrdenes para
obtener los datos de la columna IDOrden.
Entonces, una vez que tengo los IDOrden, actualizo mi DataSet
tblPagos con los IDOrden que hasta ahora eran NULL. Se entiende?

Pero, leyendo un libro de SQL Server que compre, veo que puedo
hacerlo de una mejor manera.


Tengo que crear una restriccion UNIQUE en la columna IDOrden de la
tabla tblPagos, entonces creo una relacion con la columna
IDOrden de la tabla tblOrdenes, de manera de que con la verificacion
de integridad referencial se actualizara el valor de la
columna IDOrden de la tabla tblPagos. Pero tengo el problema de que
en la tabla tblPagos alguna veces el valor de IDOrden puede ser NULL.
Entonces
no puedo crear una restriccion UNIQUE.

Se ha ocurrido utilizar TRIGGERS.

QUe me recomiendan ustedes??

GRACIAS!

Saludos























Respuesta Responder a este mensaje
#12 Jose Mariano Alvarez
08/01/2007 - 21:26 | Informe spam
Una Orden de compra la usas para realizar un pago pero no dos.
Una venta la pagas mediante un unico pago
Pero un unico pago puede pagar mas de una venta.

Un pago puede tener mas de una orden ademas de efectivo. por ello al FK en
la tabla ordenes.

La PK de ordenes es el numero (has indicado que es unico).




Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Mickro" wrote in message
news:
La PK de tblOrdenes tendrian que ser las columnas IDPago y Numero??


"Jose Mariano Alvarez"
escribió en el
mensaje news:
Si no tengo pagos parciales haria algo parecido a esto.


/* Create new table "tblOrdenes". */
/* "tblOrdenes" : Table of tblOrdenes */
/* "Numero" : Numero identifies tblOrdenes */
/* "IdPago" : IdPago is of tblOrdenes */
/* "Importe" : Importe is of tblOrdenes */
create table "tblOrdenes" (
"Numero" char(10) not null,
"IdPago" char(10) null,
"Importe" char(10) null)

go

alter table "tblOrdenes"
add constraint "tblOrdenes_PK" primary key ("Numero")


go

/* Create new table "tblPagos". */
/* "tblPagos" : Table of tblPagos */
/* "IdPago" : IdPago identifies tblPagos */
/* "MontoEfectivo" : MontoEfectivo is of tblPagos */
create table "tblPagos" (
"IdPago" char(10) not null,
"MontoEfectivo" char(10) null)

go

alter table "tblPagos"
add constraint "tblPagos_PK" primary key ("IdPago")


go

/* Create new table "tblDetalleVentas". */
/* "tblDetalleVentas" : Table of tblDetalleVentas */
/* "IdVenta" : IdVenta identifies tblDetalleVentas */
/* "IdProducto" : IdProducto is of tblDetalleVentas */
/* "Cantidad" : Cantidad is of tblDetalleVentas */
/* "Precio" : Precio is of tblDetalleVentas */
create table "tblDetalleVentas" (
"IdVenta" char(10) not null,
"IdProducto" char(10) null,
"Cantidad" char(10) null,
"Precio" char(10) null)

go

alter table "tblDetalleVentas"
add constraint "tblDetalleVentas_PK" primary key ("IdVenta")


go

/* Create new table "TBLProductos". */
/* "TBLProductos" : Table of TBLProductos */
/* "IdProducto" : IdProducto identifies TBLProductos */
/* "Descripcion" : Descripcion is of TBLProductos */
create table "TBLProductos" (
"IdProducto" char(10) not null,
"Descripcion" char(10) null)

go

alter table "TBLProductos"
add constraint "TBLProductos_PK" primary key ("IdProducto")


go

/* Create new table "tblVentas". */
/* "tblVentas" : Table of tblVentas */
/* "IdVenta" : IdVenta identifies tblVentas */
/* "Fecha" : Fecha is of tblVentas */
/* "IdPago" : IdPago is of tblVentas */
create table "tblVentas" (
"IdVenta" char(10) not null,
"Fecha" char(10) null,
"IdPago" char(10) null)

go

alter table "tblVentas"
add constraint "tblVentas_PK" primary key ("IdVenta")


go

/* Add foreign key constraints to table "tblOrdenes". */
alter table "tblOrdenes"
add constraint "tblPagos_tblOrdenes_FK1" foreign key (
"IdPago")
references "tblPagos" (
"IdPago") on update no action on delete no action

go

/* Add foreign key constraints to table "tblDetalleVentas". */
alter table "tblDetalleVentas"
add constraint "tblVentas_tblDetalleVentas_FK1" foreign key (
"IdVenta")
references "tblVentas" (
"IdVenta") on update no action on delete no action

go

alter table "tblDetalleVentas"
add constraint "TBLProductos_tblDetalleVentas_FK1" foreign key (
"IdProducto")
references "TBLProductos" (
"IdProducto") on update no action on delete no action

go

/* Add foreign key constraints to table "tblVentas". */
alter table "tblVentas"
add constraint "tblPagos_tblVentas_FK1" foreign key (
"IdPago")
references "tblPagos" (
"IdPago") on update no action on delete no action

go


/* This is the end of the Microsoft Visual Studio generated SQL DDL
script. */





Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Mickro" wrote in message
news:
Me voy a explicar mejor.

Tengo un negocio en el cual ademas de recibir pagos en efectivo, tambien
recibo ordenes de compra que expide un sindicato por un cierto valor.
Por ejemplo, un cliente puede venir a comprar a mi negocio con una Orden
de Compra de $ 10,00 o sea, tiene $ 10,00 para gastar en mi negocio, a
fin de mes yo le cobro esos $ 10 pesos al sindicato correspondiente.

Tambien puede darse el caso en el que el cliente puede pagarme con, por
ejemplo, 2 Ordenes de Compra cada una de $ 5,00 (que en total harian $
10,00). Pero yo debe ingresar en mi programa las dos ordenes por
separado. No puedo sumarlas he ingresar una sola Orden de $ 10,00.

Tambien puede darse el caso en el que el Total de la venta sea de $
15,00 y el cliente me pague con una Orden de Compra de $ 10,00 y el
resto me pague en efectivo (o sea $ 5,00 en efectivo).

Tambien, el cliente puede pagar el total de la compra solamente en
Efectivo o solamente con Ordenes de Compra.

En el caso en que el pago de la venta sea solamente en Efectivo, el
valor de IDOrden de la tabla tblPagos queda NULL.

En base a esto diseñe estas tablas

tblVentas

[IDVenta] (PK)
[Fecha]

tblDetalleVentas

[IDVenta] (FK)
[Codigo] (PK) > ' Codigo de barras del producto vendido
[Cantidad]
[Precio]
[Importe]
[IDPago] (FK)

tblPagos

[IDPago] (PK)
[Tipo] ==> ' Puede ser "Efectivo" o "Orden"
[Monto] ==> ' Cantidad de Efectivo que recibo o Monto de la Orden
[IDOrden]

tblOrdenes

[IDOrden] (PK)
[Numero] == > Numero de la Orden, es un valor unico, no pueden haber
dos ordenes con el mismo numero

Esta bien este diseño? Se puede crear una relacion entre la tabla
tblPagos y la tabla tblOrdenes?

Muchas Gracias por su Ayuda!





"Jose Mariano Alvarez"
escribió en el
mensaje news:
Podrias explicarnos por que precisas que el pago tenga un indice unico
sobre la columna IDOrden.





Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Mickro" wrote in message
news:
Hola..

"Te conviene crear un FK en pagos en la columna IDOrden que referencie
la PK
de la tabla ordenes."

Hice esto, pero el problema que tengo es que en la tabla tblPagos
algunas veces puedo asentar un pago en el que la columna IDOrden quede
NULL. Entonces me tira este error :

CREATE UNIQUE INDEX terminated because a duplicate key was found for
object name 'dbo.tblPagos' and index name 'IX_tblPagos'. The
duplicate key value is (<NULL>).
Could not create constraint. See previous errors.
The statement has been terminated.

Ya tengo pagos asentados en la tabla tblPagos y en muchos la columna
IDOrden esta NULL. Solamente hay un dato cuando el pago es realizado
con un documento que yo llamo "Orden de Compra".

Saludos



"Jose Mariano Alvarez"
escribió en
el mensaje news:
Debes insertar la orden, Luego insertar el pago, con el IDOrden o con
null, en cuyo caso luego debes hacer un Update en la tabla de pagos
para actualizar este valor.

La actualizacion en cascada no tiene sentido porque no cambias la
orden sino que actualizas el campo de la orden en la tabla de pagos.
.

Te conviene crear un FK en pagos en la columna IDOrden que referencie
la PK de la tabla ordenes.

Saludos



Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Mickro" wrote in message
news:ucPx$
Hola a atodos, tengo una duda:

Tengo dos tablas:

tblPagos

[IDPago] (PK)
[Tipo]
[IDOrden]

tblOrdenes

[IDOrden] (PK)
[Numero]


En mi programa, primero guardo los datos de la tabla tblOrdenes para
obtener los datos de la columna IDOrden.
Entonces, una vez que tengo los IDOrden, actualizo mi DataSet
tblPagos con los IDOrden que hasta ahora eran NULL. Se entiende?

Pero, leyendo un libro de SQL Server que compre, veo que puedo
hacerlo de una mejor manera.


Tengo que crear una restriccion UNIQUE en la columna IDOrden de la
tabla tblPagos, entonces creo una relacion con la columna
IDOrden de la tabla tblOrdenes, de manera de que con la verificacion
de integridad referencial se actualizara el valor de la
columna IDOrden de la tabla tblPagos. Pero tengo el problema de que
en la tabla tblPagos alguna veces el valor de IDOrden puede ser
NULL. Entonces
no puedo crear una restriccion UNIQUE.

Se ha ocurrido utilizar TRIGGERS.

QUe me recomiendan ustedes??

GRACIAS!

Saludos



























Respuesta Responder a este mensaje
#13 Jose Mariano Alvarez
08/01/2007 - 21:27 | Informe spam
Si debes indicar en cada orden de compra de la tabla a que pago corresponde.




Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Mickro" wrote in message
news:
Hola Jose, en primer lugar gracias por contestar.
Ahora, con el diseño qeu me pasaste no puedo (creo) lidiar con esta
situacion:

* El cliente me paga la venta con DOS O MAS Ordenes de Compra.

Este Diseño no me dejaria asentar mas de una Orden de Compra por Pago. No
es cierto?, corrijeme si me equivoco.

Gracias


"Jose Mariano Alvarez"
escribió en el
mensaje news:
Si no tengo pagos parciales haria algo parecido a esto.


/* Create new table "tblOrdenes". */
/* "tblOrdenes" : Table of tblOrdenes */
/* "Numero" : Numero identifies tblOrdenes */
/* "IdPago" : IdPago is of tblOrdenes */
/* "Importe" : Importe is of tblOrdenes */
create table "tblOrdenes" (
"Numero" char(10) not null,
"IdPago" char(10) null,
"Importe" char(10) null)

go

alter table "tblOrdenes"
add constraint "tblOrdenes_PK" primary key ("Numero")


go

/* Create new table "tblPagos". */
/* "tblPagos" : Table of tblPagos */
/* "IdPago" : IdPago identifies tblPagos */
/* "MontoEfectivo" : MontoEfectivo is of tblPagos */
create table "tblPagos" (
"IdPago" char(10) not null,
"MontoEfectivo" char(10) null)

go

alter table "tblPagos"
add constraint "tblPagos_PK" primary key ("IdPago")


go

/* Create new table "tblDetalleVentas". */
/* "tblDetalleVentas" : Table of tblDetalleVentas */
/* "IdVenta" : IdVenta identifies tblDetalleVentas */
/* "IdProducto" : IdProducto is of tblDetalleVentas */
/* "Cantidad" : Cantidad is of tblDetalleVentas */
/* "Precio" : Precio is of tblDetalleVentas */
create table "tblDetalleVentas" (
"IdVenta" char(10) not null,
"IdProducto" char(10) null,
"Cantidad" char(10) null,
"Precio" char(10) null)

go

alter table "tblDetalleVentas"
add constraint "tblDetalleVentas_PK" primary key ("IdVenta")


go

/* Create new table "TBLProductos". */
/* "TBLProductos" : Table of TBLProductos */
/* "IdProducto" : IdProducto identifies TBLProductos */
/* "Descripcion" : Descripcion is of TBLProductos */
create table "TBLProductos" (
"IdProducto" char(10) not null,
"Descripcion" char(10) null)

go

alter table "TBLProductos"
add constraint "TBLProductos_PK" primary key ("IdProducto")


go

/* Create new table "tblVentas". */
/* "tblVentas" : Table of tblVentas */
/* "IdVenta" : IdVenta identifies tblVentas */
/* "Fecha" : Fecha is of tblVentas */
/* "IdPago" : IdPago is of tblVentas */
create table "tblVentas" (
"IdVenta" char(10) not null,
"Fecha" char(10) null,
"IdPago" char(10) null)

go

alter table "tblVentas"
add constraint "tblVentas_PK" primary key ("IdVenta")


go

/* Add foreign key constraints to table "tblOrdenes". */
alter table "tblOrdenes"
add constraint "tblPagos_tblOrdenes_FK1" foreign key (
"IdPago")
references "tblPagos" (
"IdPago") on update no action on delete no action

go

/* Add foreign key constraints to table "tblDetalleVentas". */
alter table "tblDetalleVentas"
add constraint "tblVentas_tblDetalleVentas_FK1" foreign key (
"IdVenta")
references "tblVentas" (
"IdVenta") on update no action on delete no action

go

alter table "tblDetalleVentas"
add constraint "TBLProductos_tblDetalleVentas_FK1" foreign key (
"IdProducto")
references "TBLProductos" (
"IdProducto") on update no action on delete no action

go

/* Add foreign key constraints to table "tblVentas". */
alter table "tblVentas"
add constraint "tblPagos_tblVentas_FK1" foreign key (
"IdPago")
references "tblPagos" (
"IdPago") on update no action on delete no action

go


/* This is the end of the Microsoft Visual Studio generated SQL DDL
script. */





Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Mickro" wrote in message
news:
Me voy a explicar mejor.

Tengo un negocio en el cual ademas de recibir pagos en efectivo, tambien
recibo ordenes de compra que expide un sindicato por un cierto valor.
Por ejemplo, un cliente puede venir a comprar a mi negocio con una Orden
de Compra de $ 10,00 o sea, tiene $ 10,00 para gastar en mi negocio, a
fin de mes yo le cobro esos $ 10 pesos al sindicato correspondiente.

Tambien puede darse el caso en el que el cliente puede pagarme con, por
ejemplo, 2 Ordenes de Compra cada una de $ 5,00 (que en total harian $
10,00). Pero yo debe ingresar en mi programa las dos ordenes por
separado. No puedo sumarlas he ingresar una sola Orden de $ 10,00.

Tambien puede darse el caso en el que el Total de la venta sea de $
15,00 y el cliente me pague con una Orden de Compra de $ 10,00 y el
resto me pague en efectivo (o sea $ 5,00 en efectivo).

Tambien, el cliente puede pagar el total de la compra solamente en
Efectivo o solamente con Ordenes de Compra.

En el caso en que el pago de la venta sea solamente en Efectivo, el
valor de IDOrden de la tabla tblPagos queda NULL.

En base a esto diseñe estas tablas

tblVentas

[IDVenta] (PK)
[Fecha]

tblDetalleVentas

[IDVenta] (FK)
[Codigo] (PK) > ' Codigo de barras del producto vendido
[Cantidad]
[Precio]
[Importe]
[IDPago] (FK)

tblPagos

[IDPago] (PK)
[Tipo] ==> ' Puede ser "Efectivo" o "Orden"
[Monto] ==> ' Cantidad de Efectivo que recibo o Monto de la Orden
[IDOrden]

tblOrdenes

[IDOrden] (PK)
[Numero] == > Numero de la Orden, es un valor unico, no pueden haber
dos ordenes con el mismo numero

Esta bien este diseño? Se puede crear una relacion entre la tabla
tblPagos y la tabla tblOrdenes?

Muchas Gracias por su Ayuda!





"Jose Mariano Alvarez"
escribió en el
mensaje news:
Podrias explicarnos por que precisas que el pago tenga un indice unico
sobre la columna IDOrden.





Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Mickro" wrote in message
news:
Hola..

"Te conviene crear un FK en pagos en la columna IDOrden que referencie
la PK
de la tabla ordenes."

Hice esto, pero el problema que tengo es que en la tabla tblPagos
algunas veces puedo asentar un pago en el que la columna IDOrden quede
NULL. Entonces me tira este error :

CREATE UNIQUE INDEX terminated because a duplicate key was found for
object name 'dbo.tblPagos' and index name 'IX_tblPagos'. The
duplicate key value is (<NULL>).
Could not create constraint. See previous errors.
The statement has been terminated.

Ya tengo pagos asentados en la tabla tblPagos y en muchos la columna
IDOrden esta NULL. Solamente hay un dato cuando el pago es realizado
con un documento que yo llamo "Orden de Compra".

Saludos



"Jose Mariano Alvarez"
escribió en
el mensaje news:
Debes insertar la orden, Luego insertar el pago, con el IDOrden o con
null, en cuyo caso luego debes hacer un Update en la tabla de pagos
para actualizar este valor.

La actualizacion en cascada no tiene sentido porque no cambias la
orden sino que actualizas el campo de la orden en la tabla de pagos.
.

Te conviene crear un FK en pagos en la columna IDOrden que referencie
la PK de la tabla ordenes.

Saludos



Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Mickro" wrote in message
news:ucPx$
Hola a atodos, tengo una duda:

Tengo dos tablas:

tblPagos

[IDPago] (PK)
[Tipo]
[IDOrden]

tblOrdenes

[IDOrden] (PK)
[Numero]


En mi programa, primero guardo los datos de la tabla tblOrdenes para
obtener los datos de la columna IDOrden.
Entonces, una vez que tengo los IDOrden, actualizo mi DataSet
tblPagos con los IDOrden que hasta ahora eran NULL. Se entiende?

Pero, leyendo un libro de SQL Server que compre, veo que puedo
hacerlo de una mejor manera.


Tengo que crear una restriccion UNIQUE en la columna IDOrden de la
tabla tblPagos, entonces creo una relacion con la columna
IDOrden de la tabla tblOrdenes, de manera de que con la verificacion
de integridad referencial se actualizara el valor de la
columna IDOrden de la tabla tblPagos. Pero tengo el problema de que
en la tabla tblPagos alguna veces el valor de IDOrden puede ser
NULL. Entonces
no puedo crear una restriccion UNIQUE.

Se ha ocurrido utilizar TRIGGERS.

QUe me recomiendan ustedes??

GRACIAS!

Saludos



























Respuesta Responder a este mensaje
#14 Javier Loria
09/01/2007 - 13:46 | Informe spam
Hola Mickro:
Para evitar la limitacion del unique puedes crear una vista que elimine
los null y luego haces la restriccion con el Unique. Seria algo como esto:
CREATE VIEW TblPagosAplicados WITH Schemabinding
AS
SELECT IDPago, IDOrden
FROM dbo.TblPagos
WHERE IDOrden IS NOT NULL
GO
CREATE UNIQUE CLUSTERED INDEX PK_TblPagosAplicados
ON TblPagosAplicados(IDPago)
GO
CREATE UNIQUE NONCLUSTERED INDEX UN_TblPagosAplicados_IDOrden
ON TblPagosAplicados(IDOrden)
== El primer indice indice de la vista debes ser CLUSTERED, en este caso
repetí el IDPago para que se entienda mejor el ejemplo, pero pudo no haberse
creado y en su lugar convertir UN_TblPagosAplicados_IDOrden en clustered.
Saludos,

Javier Loria
Costa Rica-MVP
Solid Quality Learning

"Mickro" wrote in message
news:ucPx$
Hola a atodos, tengo una duda:

Tengo dos tablas:

tblPagos

[IDPago] (PK)
[Tipo]
[IDOrden]

tblOrdenes

[IDOrden] (PK)
[Numero]


En mi programa, primero guardo los datos de la tabla tblOrdenes para
obtener los datos de la columna IDOrden.
Entonces, una vez que tengo los IDOrden, actualizo mi DataSet tblPagos con
los IDOrden que hasta ahora eran NULL. Se entiende?

Pero, leyendo un libro de SQL Server que compre, veo que puedo hacerlo de
una mejor manera.


Tengo que crear una restriccion UNIQUE en la columna IDOrden de la tabla
tblPagos, entonces creo una relacion con la columna
IDOrden de la tabla tblOrdenes, de manera de que con la verificacion de
integridad referencial se actualizara el valor de la
columna IDOrden de la tabla tblPagos. Pero tengo el problema de que en la
tabla tblPagos alguna veces el valor de IDOrden puede ser NULL. Entonces
no puedo crear una restriccion UNIQUE.

Se ha ocurrido utilizar TRIGGERS.

QUe me recomiendan ustedes??

GRACIAS!

Saludos



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida