【发布时间】:2010-09-20 12:33:39
【问题描述】:
我想实现类似的东西,但我遇到了一些问题。我想知道解决这个问题的选择是什么,以及在这种情况下使用的常用技术是什么。 (如果您不熟悉 Netflix,请参阅此问题的底部)
目前的方法 创建一个“控制”表,其中包含有关客户状态的信息并将其交叉引用到服务计划表。
controls(member_id, movies_rented_this_month, movies_at_home)
plans(movies_per_month_limit, movies_at_home_limit)
当商品被退回时,请检查控制表以查看客户是否有资格接收另一个订单。
if controls.movies_at_home < plan.movies_at_home_limit
and if controls.movies_this_month < plan.movies_this_month_limit
对于之前没有订单的任何人(新客户),或者在关闭订单时他们的电影队列中没有任何内容的人,我们会创建一个预定事件来创建订单(轮询)。
问题我们需要考虑每个客户可以根据他们的计划获得多少订单。上述逻辑在某些情况下会失败:
plans.movies_this_month_limit = 4, controls.movies_this_month = 3
plans.movies_at_home_limit = 2 , controls.movies_at_home = 0
在上述情况下,有资格获得一份订单的客户将收到两份。颠倒标准可以逆转问题。
简化架构
members(id, plan_id)
movies(id, title)
plans(id, movies_at_home_limit, movies_per_month_limit)
controls(member_id, movies_at_home, movies_this_month)
movie_queue(member_id, movies_id)
Netflix 允许会员保留电影愿望清单的在线电影租赁服务。客户会根据他们的计划类型从他们的愿望清单(通过邮件)逐步接收电影。
【问题讨论】:
-
> 暗示我们对封闭系统一无所知
-
我已经添加了一个简短的解释 Netflix 是什么以及我的架构是什么。抱歉,其中一件事让我措手不及。
标签: database-design