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

Database design 基于订阅的服务的数据模型,database-design,Database Design,我试图模拟一个基于订阅的服务提供商,如果你愿意的话,我会遇到一个“蒸汽锁”的案例。我定义了以下模型,其中用户订阅一个包含各种服务的包-每个包级别包含一个或多个服务: +---------------+ +-----------------+ +----------+ | Packages |<--- | PackageServices | ---> | Services | +---------------+ +-----------------+

我试图模拟一个基于订阅的服务提供商,如果你愿意的话,我会遇到一个“蒸汽锁”的案例。我定义了以下模型,其中用户订阅一个包含各种服务的包-每个包级别包含一个或多个服务:

+---------------+     +-----------------+      +----------+
| Packages      |<--- | PackageServices | ---> | Services |
+---------------+     +-----------------+      +----------+
       ^
       |
+---------------+     +----------+
| Subscriptions |---> | Users    |
+---------------+     +----------+
+-------------++--------------++----------+
|套餐| |服务|
+---------------+     +-----------------+      +----------+
^
|
+---------------+     +----------+
|订阅|-->|用户|
+---------------+     +----------+
但是,每个服务都有自己的用户定义设置,并且每个服务可能有一个其他实体的关联数组来存储服务数据。我可以为特定的用户处理每个服务的数据实体,但是我在设置表上被难住了。我曾想过创建一个“ServiceSettings”表格,并为用户和服务设置密钥,但这似乎有点奇怪。这种做法给我留下了以下问题:

  • 如果他们升级了软件包并获得了新的服务怎么办
  • 如何将新的ServiceSettings设置为或仅限于用户已订阅的服务
  • 如果我添加了一项新服务怎么办
  • 我走的是正确的道路,还是我似乎缺少了另一种选择


    提前谢谢

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

    因此,要直接解决这些问题:

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

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


    如果我添加一个新服务怎么办?那么您添加了新的服务设置,UserServiceSettings是默认的(或者向用户提供了通知,以便他们可以填写他们想要的内容,或者两者都有),现在您有了所需的详细信息。默认值在动态环境中很有用,因为人们不需要他们来做决定。默认值表示,除非您更改它,否则您将得到它;使人们接受默认设置或采取行动。

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

    因此,要直接解决这些问题:

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

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


    如果我添加一个新服务怎么办?那么您添加了新的服务设置,UserServiceSettings是默认的(或者向用户提供了通知,以便他们可以填写他们想要的内容,或者两者都有),现在您有了所需的详细信息。默认值在动态环境中很有用,因为人们不需要他们来做决定。默认值表示,除非您更改它,否则您将得到它;使人们接受默认或采取行动。

    您的问题主要是关于随时间的变化。但是您的模型是暂时静态的——它没有认识到数据关联在过去或将来可能是不同的

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

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

  • 如果客户切换软件包,您将结束订阅并为新订阅创建新记录

  • 如果已重新配置现有包,则根据需要结束日期/创建新包服务

  • 请注意,定价也应该是它自己的子模式,带有时间戳,并带有指向用户的链接,