基于订阅的服务的数据模型

时间:2012-05-08 00:24:17

标签: database-design

我正在尝试为基于订阅的服务提供商建模并遇到“蒸汽锁”的情况,如果你愿意的话。我定义了以下模型,其中用户订阅了各种服务的包 - 每个包级别包含一个或多个服务:

+---------------+     +-----------------+      +----------+
| Packages      |<--- | PackageServices | ---> | Services |
+---------------+     +-----------------+      +----------+
       ^
       |
+---------------+     +----------+
| Subscriptions |---> | Users    |
+---------------+     +----------+

然而,每个服务都有自己的用户定义设置 - 每个服务可能有一个相关的其他实体数组来存储服务数据。我可以为特定用户处理每个服务的数据实体,但我对设置表感到困惑。我曾想过创建一个键入用户和服务的“ServiceSettings”表,但这看起来有点奇怪。这种方法给我留下了以下问题:

  1. 如果他们升级他们的套餐并获得新服务怎么办?
  2. 如何将新的ServiceSettings设置或约束为仅限用户订阅的服务?
  3. 如果我添加新服务怎么办?
  4. 我是在正确的轨道上,还是有另一种我似乎失踪的替代方案?

    提前致谢!

2 个答案:

答案 0 :(得分:4)

我喜欢你的 ServiceSettings ;但只能定义每个服务的设置列表。这些服务设置的值必须存在于 SubscriptionServiceSettings UserServiceSettings 中,具体取决于多个用户是否可以共享订阅但是否具有不同的服务设置。添加新服务时,必须提供默认值,以便在添加时添加;用户首先获取这些默认值;但可以改变它们以满足他们的需求。和/或用户需要某种有关新服务设置的通知。

所以要直接解决问题:

如果他们升级他们的套餐并获得新服务怎么办? 使用userServicesSettings来保留包设置,当他们订阅包含这些设置的包时,使用它们,否则忽略它们;但是将来保留它们用于改变服务(再次是商业问题)

如何将新的ServiceSettings设置或限制为仅限用户订阅的服务? 这只是订阅,pacakage,packageservices和ServiceSettings之间的连接。 (除非你想维护包版本;但这是一个完全不同的思路)

如果我添加新服务该怎么办?所以你添加新的serviceSettings,默认UserServiceSettings(或提供给用户的通知,以便他们可以填写他们想要的东西,或者两者兼而有之),现在你有了需要的细节。默认值在动态环境中很有用,因为人们不需要做出他们需要做出的决定。默认值说,除非你改变它,否则你会得到它;导致人们接受违约或采取行动。

答案 1 :(得分:0)

您的问题主要是关于随着时间的变化。但是您的模型在时间上是静态的-它无法识别数据关联在过去或将来可能有所不同。

此模型适用于仅与当前部署的订阅有关的生产环境。但是,为了能够执行基于时间的快照或管理服务转换,您必须至少将时间戳记添加到packageServices表(服务到包关联的开始/结束日期),以及类似地添加到订阅表。 >

如果他们升级其套餐并获得新服务怎么办? 软件包需要独立于订阅而存在。如果软件包必须包括可选服务,则您的模型需要带有“时间戳”的“按客户服务配置”的其他子模式。因此,假设没有可选服务,上述模型将起作用:

  1. 如果客户更换包裹,则您要终止订阅并为新订阅创建新记录。

  2. 如果重新配置了现有软件包,则结束日期/根据需要创建新的packageServices。

  3. 请注意,定价也应是其自己的子模式,带有时间戳,并带有指向用户的链接,因为计费始终会随时间变化并且必须能够进行历史查询。

如何将新的ServiceSettings设置或限制为仅用户使用的服务?

假设设置是特定于用户的,那么您需要另一个将时间戳服务链接到用户的子模式。保持此子模式简单的一种方法是使其成为键/值对(serviceID,userID,SettingName,SettingValue,开始/结束日期)

如果我添加新服务怎么办?

创建一条服务记录,将其与packageServices中的开始日期链接,然后将其与ServiceSettingsUser中的begindate链接到用户。