建立通用优惠券服务系统

时间:2015-09-01 09:18:54

标签: mysql mongodb database-schema coupon

我在一家食品电子商务公司工作,我正在重新设计优惠券服务。

优惠券可以有很多规则,如:

template<typename _Clock, typename _Duration>
  cv_status
  wait_until(unique_lock<mutex>& __lock,
     const chrono::time_point<_Clock, _Duration>& __atime)
  {
    // DR 887 - Sync unknown clock to known clock.
    const typename _Clock::time_point __c_entry = _Clock::now();
    const __clock_t::time_point __s_entry = __clock_t::now();
    const auto __delta = __atime - __c_entry;
    const auto __s_atime = __s_entry + __delta;

    return __wait_until_impl(__lock, __s_atime);
  }

template<typename _Clock, typename _Duration, typename _Predicate>
  bool
  wait_until(unique_lock<mutex>& __lock,
     const chrono::time_point<_Clock, _Duration>& __atime,
     _Predicate __p)
  {
    while (!__p())
      if (wait_until(__lock, __atime) == cv_status::timeout)
        return __p();
    return true;
  }

当前系统处理所有这些规则,每个规则表示为一列是MySQL:http://pastebin.com/6KDC0iC8

然而,由于优惠券的规则将继续变化,我们无法每次都创建列。我们可以吗?有没有办法让它通用而不失去查询的能力,如:

a)for what users it is valid
b)For what restaurants it is valid
c)For what area it is valid
d)min amount
etc etc

我想用mongo db来做这个。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这是我对你的情景的建议。只是我的初步想法,所以如果你想让我详细说明,请告诉我。

如果必须为每个属性创建列,它可能确实不是非常可扩展的。我建议您在单独的表中存储具有一对多或多对多关系的优惠券的属性。

我可以想象这样的情况:

Coupon
  id
  ...

Restaurant
  id
  ...

Area
  id
  ...

CouponsInArea
  coupon_id
  area_id

CouponRestaurantValidity
  coupon_id
  restaurant_id

这些可能不会发生太大变化。

某些属性也可能对优惠券有效。你可以用更通用的方式解决这个问题:

CouponProperty
  coupon_id
  property (a string)

然后您可以通过以类似方式检索来查询:

select coupon properties where coupon_id is coupon.id