2

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

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

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

  1. 如果他们升级套餐并获得新服务怎么办?
  2. 如何将新的 ServiceSettings 设置或限制为仅用户已订阅的服务?
  3. 如果我添加新服务怎么办?

我是在正确的轨道上,还是我似乎缺少另一种选择?

提前致谢!

4

2 回答 2

4

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

所以直接解决问题:

如果他们升级套餐并获得新服务怎么办? 使用 userServicesSettings 保留包设置,当他们订阅具有这些设置的包时,使用它们,否则忽略它们;但保留它们以供将来更改服务(又是一个业务问题)

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

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

于 2012-05-08T00:41:24.880 回答
0

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

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

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

  1. 如果客户更换套餐,您将结束订阅并为新订阅创建新记录。

  2. 如果重新配置现有包,则根据需要 enddate/ 创建新的 packageServices。

  3. 请注意,定价也应该是它自己的子架构,带有时间戳,并带有指向用户的链接,因为计费总是随着时间而变化,并且必须能够进行历史查询。

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

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

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

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

于 2018-08-24T18:43:30.757 回答