使用网站和产品数据库架构帮助的许可

时间:2011-05-09 13:30:53

标签: mysql database-design normalization database-schema

我正在建立一个网站,我将向客户收取费用。我想有6个月度或年度许可证选项,并且每个许可证都有一些不同的版本,每个版本都授予不同类型的网站访问权限。

此外,我还会为购买许可证添加一些可选附加功能。这些将是一次性购买更像产品而不是许可证。它们是网站的更多附加组件,可实现更多功能。一旦购买,你就可以保留它。所以一切都基于网站,没有运输担心。

这将以某种购物车的方式显示,他们可以选择他们想要的东西然后发送到Paypal进行处理。

只是想知道如何在我的数据库中正确建模?到目前为止,我已经提出:

Database schema

基本上我试图将许可证和产品放在同一个表中,并使用标志列(licence_or_product)来区分这两者。这将有助于在网站上显示它是产品还是许可证。

是否值得拥有许可证* offering_start_date *和* offering_end_date *字段?如果我想以不同的价格提供新的许可证,我试图获得它以便我可以使该产品到期。这样,已经以该价格购买了许可证的客户始终保持该价格。如果我想更改价格,我会将提供结束日期设置为今天,然后在将来创建一个新的licence_products行,其价格更低但end_date。这是正确的方法吗?或者你只是直接编辑项目的价格?我只是想如果价格发生变化,那么客户想要退还该许可证,你如何追踪他们为该许可证支付了多少钱? amount_paid字段会告诉我整个订单的成本是多少,而不是现在已经更改的许可证的原始价格。我是否需要所有产品价格变化的历史记录?

其他我不知道该怎么办,让我们说他们已经购买了使用该网站一年的许可证。如何提取哪个是最新的许可证?假设我已经开始使用30天试用许可证,然后他们购买了年度许可证。我是否立即使试用许可证无效?我想我一次只想要一个有效的许可证。因此,如果他们在旧许可证到期之前购买另一个许可证,我不确定我的程序应该如何处理。

任何帮助非常感谢。感谢您!

P.S。这是SQLyog数据库模式和SQL,如果你想稍微重做它。

sql db extract

SQLyog schema

1 个答案:

答案 0 :(得分:3)

我认为你应该创建以下3个表:
1.客户(客户或任何对您有意义的事),
2.许可证和
3. customer_license。

我建议customer_license表的以下字段:

  • id(some int auto_increment)
  • customer_id(some int)FK
  • license_id(some int)FK
  • price_offered decimal(7,2)(具有您需要的精度)
  • expiration_date date
  • active tinyint(1)
  • created_at datetime
  • updated_at datetime

通过这种方式,您可以使用您提供的许可证跟踪客户的所有详细信息:您提供的是什么?什么时候提供?什么时候到期?价格提供?许可证是否有效?

祝你好运