2011-09-23 188 views
1

我使用许多不同类型的优惠券创建优惠券系统。我想组织它,以便它可以扩展。我不知道来存储不同类型的优惠券的最佳方式,例如:我应该如何在我的数据库中存储各种优惠券?

  • 固定金额关闭整个订单
  • 固定PRECENTAGE关闭整个订单
  • 固定金额过一个项目(可能是由项目的SKU或可能是最昂贵的项目)
  • 固定折一个项目(可以通过SKU项目或可能是最昂贵的项目)
  • 购买X即可获得$ Y
  • 免费产品(由项目的SKU,由价格)
  • X为$ Y(3 15 $ 10 $ 2等)

我使用的MySQL,将它最好存储作为数组? JSON?任何其他想法或有类似问题的人都在意分享他们如何做到这一点?

+0

@ acidzombie24感谢您的超级有用评论 –

回答

0

我会创建另一个表 - tblCouponType作为实例,并使用唯一的数字和字符串填充我的类型的注释,并在新类型变为可用时添加到该表中。然后将另一列添加到您的优惠券表格中,该表格引用您的优惠券类型的数字值。这有助于整体 - 数据库:)

0

对于SomeSQL,我宁愿不使用JSON,因为几乎不可能有效地查询它。

我的方法是简单地说,有一张表用于优惠券类型(列:id,name,...),另一个用于实际优惠券。

在优惠券表中,我将有一个“type_id”列与“couponTypes”表(或外键)进行交叉引用。

这样,您以后可以随时添加新的优惠券类型,而不必使您对此点的数据无效。

查询 “按类型优惠券” 是

"SELECT 'id' FROM couponTypes WHERE 'name' = 'fixed sum'"; => $id 

"SELECT * FROM coupons WHERE 'type_id' = $id"; => All fixed sum Coupons. 

欢迎到MySQL的问题!

0

我假设你有某种products表,其中包含您可以出售的所有产品。您可以创建一个coupons表,看起来像:

id  discount  discount_percentage 
INT PK DECIMAL(10,2) DECIMAL(3,2) 

1  5.00   NULL 
2  NULL   10.00 

然后,你可以创建一个链接表coupons_products这样的:

coupon_id required_product_id 
INT FK  INT FK 

1   4773 
1   993 
在这个例子中

因此,优惠券ID 1给出了$ 5元的优惠,并要求两种产品在订单上出现:4773和993.优惠券ID 2提供10%的折扣并且不需要产品。

1

关闭我的头顶,你可以有设计表如下的“关系”的一部分:

Table: Coupon_Summary 
Columns: Coupon_ID(primary key), Coupon_Name 

此表将举行“顶级”关于优惠券的数据。

Table: Coupon_Description 
Columns: Coupon_ID(foreign key), Coupon_Description 

此表格将保存优惠券的说明。

Table: Coupon_Value 
Columns: Coupon_ID(foreign key), Coupon_Value, Coupon_Currancy 

此表格将保存优惠券提供多少折扣。 Coupon_Value可以是百分比或硬值(百分比将附加一个%符号),如果这是零,则优惠券提供全部折扣,或者换句话说该项目是免费的。这还包括货币以折扣金额为基础,以便您可以在货币之间进行转换。

Table: Coupon_Target_Order 
Columns: Coupon_ID(foreign key), Order_IDs 

此表保存有关优惠券影响哪些订单的数据。如果Order_ID为零或零,则优惠券对所有订单均有效。否则,您可以拥有多个订单的多个ID。

我希望这是一些帮助=)。

+0

+1对于所有关键点的详细解释! – vzwick

+2

为什么所有这些表?为什么不是Coupon_General的名称,desc等,然后Coupon_SomeType使用外键并提供它自己的类型特定数据? – 2011-09-24 00:08:41

+0

如果您打算处理大量数据,这是一个更好的方法。至少它是给我的。你的意见可能不同=) –