¿Me echáis una mano con algo de teoría?

05/11/2007 - 17:15 por Masta | Informe spam
Hola a todos.

Tengo una duda a la hora de plantear un par de tablas.

Tengo una tabla de PEDIDOS y otra de CUPONES de tal forma (os pongo
sólo los campos involucrados para este caso).

PEDIDOS
IDPedido
IDCupon
Descontado

CUPONES
=IDCupon
Nombre
Caducidad
Descuento

Como véis, es un simple sistema de couponing para una tienda.

Mi duda es:
Si el cliente introduce un cupongo válido, cuando genero el pedido le
indico el IDCupon correspondiente. Pero si el cliente no pone ningún
cupón, ¿qué debería introducir en el campo IDCupon de la tabla
PEDIDOS? ¿Tengo que crear un cupón sin valor que me sirva de comodín
para estos casos?

¿Cómo lo haríais vosotros contando que luego tendré que hacer
estadísticas de campañas de cupones, con lo que para que salgan las
queries, en el campo IDCupon debería haber un ID existente en la tabla
de CUPONES, no?

Siento que me he liado con algo estúpido, echadme una mano por favor.

Muchas gracias!

Preguntas similare

Leer las respuestas

#16 Pablo Roca
06/11/2007 - 10:49 | Informe spam
No creo que sea cuestión de gustos o no, a mi me enseñaron a la forma de
Víctor o Alfredo y en la vida se me ocurriría crear una foreign key que
pudiera contener nulos.



A mi tampoco se me ocurriría tener foreign key con valores nulos (no me
entra en mi cabeza hacerlo así), la solución de la tabla adicional que
propone Alfredo creo que es lo mejor.


Saludos,

Pablo Roca
La Coruna - Spain
http://www.portalfox.com
Respuesta Responder a este mensaje
#17 jcpc91
06/11/2007 - 20:59 | Informe spam
vaya ustedes si ke no saben de base de datos
Respuesta Responder a este mensaje
#18 Carlos M. Calvelo
07/11/2007 - 00:49 | Informe spam
Hola Masta,

On 6 nov, 10:06, Masta wrote:
Hola a todos de nuevo.

Vaya debate se ha montado :)

En el caso del proyecto que estoy realizando, entre las posibilidades
de utilización de cupones tendremos estas:

- Un pedido utiliza UN SOLO cupón, nunca más de uno.
- Varios pedidos pueden utilizar el mismo cupón.
- Habrán pedidos que no utilicen ningún cupón.

Dicho esto, leyéndoos he recapacitado y es cierto que no me parece la
manera más "limpia" lo de utilizar el registro-comodín. Quizá me
convenció en un principio porque yo también soy más desarrollador de
software que experto en bases de datos.

Viendo las cosas con algo más de perspectiva después de leeros, me
parece que la opción indicada sería, tal como dijo Alfredo Novoa, lo
de utilizar una tabla intermedia de esta forma:

PEDIDOS
> IDPedido
Descontado (cantidad descontada después de aplicar el cupón)

CUPONES
=> IDCupon
Nombre
Caducidad
Descuento

CUPON_PEDIDO
> IDPedido
IDCupon

¿Os parece bien para esta casuística particular?




Decisión sabia! :-)

Dado el comentario que das con el atributo Descontado
(cantidad descontada después de aplicar el cupón) me
parece este mas bien un atributo de la relación
CUPON_PEDIDO.


PEDIDOS
IDPedido (PK)

CUPONES
=IDCupon (PK)
Nombre
Caducidad
Descuento

CUPON_PEDIDO
IDPedido FK references PEDIDOS
IDCupon FK references CUPONES
Descontado (cantidad descontada después de aplicar el cupón)
(PK: {IDPedido, IDCupon})

Saludos,
Carlos
Respuesta Responder a este mensaje
#19 Carlos M. Calvelo
07/11/2007 - 01:09 | Informe spam
Ui! Perdón!

Se me había escapado esto:

> - Un pedido utiliza UN SOLO cupón, nunca más de uno.



Y entonces la clave primaria de CUPON_PEDIDO
debería ser {IDPedido} y no {IDPedido, IDCupon}.

CUPON_PEDIDO
IDPedido FK references PEDIDOS
IDCupon FK references CUPONES
Descontado (cantidad descontada después de aplicar el cupón)
(PK: {IDPedido})

Saludos,
Carlos
Respuesta Responder a este mensaje
#20 jcpc91
07/11/2007 - 02:11 | Informe spam
no me parece buena idea ya ke tu relación es de este tipo

________ _________
|cupones | --o< |pedidos |

¿se entiende? espero ke si osea ke en en la tabla de pedidos la llave
foranea seraá opcional

PEDIDOS
IDPedido
IDCupon
Descontado


CUPONES
=IDCupon
Nombre
Caducidad
Descuento


ahora bien a tu pregunta de
¿Cómo lo haríais vosotros contando que luego tendré que hacer
estadísticas de campañas de cupones, con lo que para que salgan las
queries, en el campo IDCupon debería haber un ID existente en la
tabla
de CUPONES, no?

este query lo tendrás ke hacer con un LEFT JOIN O RIGHT JOIN
dependiendo seria algo asi

SELECT * FROM cupones LEFT OUTER JOIN pedidos ON cupones.idcupon pedidos.idcupon

ahora supob ke tienes estod datos en la tabla
cupones
idcupones
1
2
3
4
5
6
7
8
9
y estos otros datos en la tabla pedidos
idpedido idcupon
1 NULL
2 1
3 1
4 2
5 2
6 NULL

si te das cuenta en la tabla pedidos la llave foranea idcupon es
opcional y por lo tanto en algunos registros aparecerá null y en otros
no y cada pedido solo puede utilizar un cupón o no utilizarlo (null)
pero varios pedidos pueden utilizar el mismo cupon como los pedidos 2
y 3 ke utilizan el cupon 1
ala hora de hacer tu consulta con el join terdrá este resultado
idcupon idpedido idcupon
1 2 1
1 3 1
2 4 2
2 5 2
3 NULL NULL
4 NULL NULL
5 NULL NULL

los campos con null significa ke son fupones ke no se han utilizado
si kires ke salgo todos los pedidos inclusive akellos ke no utilizan
ningun cupon tendras ke hacer un FULL OUTER JOIN y el resultado será
idcupon idpedido idcupon
1 2 1
1 3 1
2 4 2
2 5 2
3 NULL NULL
4 NULL NULL
5 NULL NULL
6 NULL NULL
7 NULL NULL
8 NULL NULL
9 NULL NULL
NULL 1 NULL <-este es un pedido sin cupon

ves de ahi puedes sacar estadisticas como saber cuantos veces un cuón
está siendo utilizado o ke se yo ke otras cosas
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida