【发布时间】:2011-08-21 17:00:20
【问题描述】:
我正在建立一个网站,我会向我的客户收取使用它的费用。我正在考虑提供 6 个每月或每年的许可选项,并且将提供几种不同的许可变体,每种变体都授予对网站的不同类型的访问权限。
此外,我还将提供一些可选的附加功能,您可以将它们添加到购买他们的许可证中。这些将是一次性购买,更像是产品而不是许可证。它们是支持更多功能的网站的更多附加组件。一旦购买,您就可以保留它。所以一切都以网站为基础,无需担心运费。
这将以某种购物车方式显示,他们可以在其中选择他们想要的东西,然后发送到 Paypal 进行处理。
只是想知道如何在我的数据库中正确建模?到目前为止,我想出了:
基本上,我尝试将许可证和产品放在同一个表中,并使用标志列 (licence_or_product) 来区分两者。这将有助于在网站上显示它是产品还是许可证。
许可证 *offering_start_date* 和 *offering_end_date* 字段是否值得?我正在尝试获取它,以便如果我想以不同的价格提供新的许可证产品,我可以使该产品过期。这样,已经以该价格购买许可证的客户始终保持该价格。如果我想更改价格,我会将提供结束日期设置为今天,然后创建一个新的 licence_products 行,价格较低,但 end_date 在未来。这是正确的方法吗?还是直接编辑商品的价格?我只是在想,如果价格发生变化,那么客户想要为该许可证退款,您如何跟踪他们为该许可证支付了多少钱? amount_paid 字段会告诉我整个订单的成本,但不会告诉我现在已更改的许可证的原始价格。我需要所有产品价格变化的历史记录吗?
其他我不知道该怎么做的事情,假设他们已经购买了使用该网站一年的许可证。如何提取最新的许可证?假设我已经开始使用 30 天的试用许可证,然后他们购买了年度许可证。我是否立即使试用许可证无效?我想我一次只想要一个有效的许可证。因此,如果他们在旧许可证到期之前购买另一个许可证,我不确定我的程序应该如何处理。
非常感谢任何帮助。谢谢!
附:这是 SQLyog 数据库架构和 SQL,如果您想尝试对其进行一些修改。
【问题讨论】:
标签: mysql database-design normalization database-schema