Database design 基于订阅的服务的数据模型
我试图模拟一个基于订阅的服务提供商,如果你愿意的话,我会遇到一个“蒸汽锁”的案例。我定义了以下模型,其中用户订阅一个包含各种服务的包-每个包级别包含一个或多个服务:Database design 基于订阅的服务的数据模型,database-design,Database Design,我试图模拟一个基于订阅的服务提供商,如果你愿意的话,我会遇到一个“蒸汽锁”的案例。我定义了以下模型,其中用户订阅一个包含各种服务的包-每个包级别包含一个或多个服务: +---------------+ +-----------------+ +----------+ | Packages |<--- | PackageServices | ---> | Services | +---------------+ +-----------------+
+---------------+ +-----------------+ +----------+
| Packages |<--- | PackageServices | ---> | Services |
+---------------+ +-----------------+ +----------+
^
|
+---------------+ +----------+
| Subscriptions |---> | Users |
+---------------+ +----------+
+-------------++--------------++----------+
|套餐| |服务|
+---------------+ +-----------------+ +----------+
^
|
+---------------+ +----------+
|订阅|-->|用户|
+---------------+ +----------+
但是,每个服务都有自己的用户定义设置,并且每个服务可能有一个其他实体的关联数组来存储服务数据。我可以为特定的用户处理每个服务的数据实体,但是我在设置表上被难住了。我曾想过创建一个“ServiceSettings”表格,并为用户和服务设置密钥,但这似乎有点奇怪。这种做法给我留下了以下问题:
提前谢谢 我喜欢你的服务设置;但仅定义每个服务的设置列表。这些服务设置的值必须存在于订阅服务设置或用户服务设置中,具体取决于多个用户是否可以共享一个订阅但具有不同的服务设置。添加新服务时,必须提供默认值,以便在添加时;用户首先获得这些默认值;但可以改变它们以满足它们的需要。和/或用户需要某种关于新服务设置的通知 因此,要直接解决这些问题: 如果他们升级套餐并获得新服务怎么办? 使用userServicesSettings保留包设置,并在订阅具有这些设置的包时使用它们,否则忽略它们;但保留它们以备将来更改服务(这又是一个商业问题) 如何将新的服务设置设置为或仅限于用户已订阅的服务? 这只是订阅、打包、打包服务和服务设置之间的连接。(除非您想维护软件包版本;但这是一个完全不同的思路)
如果我添加一个新服务怎么办?那么您添加了新的服务设置,UserServiceSettings是默认的(或者向用户提供了通知,以便他们可以填写他们想要的内容,或者两者都有),现在您有了所需的详细信息。默认值在动态环境中很有用,因为人们不需要他们来做决定。默认值表示,除非您更改它,否则您将得到它;使人们接受默认设置或采取行动。我喜欢您的服务设置;但仅定义每个服务的设置列表。这些服务设置的值必须存在于订阅服务设置或用户服务设置中,具体取决于多个用户是否可以共享一个订阅但具有不同的服务设置。添加新服务时,必须提供默认值,以便在添加时;用户首先获得这些默认值;但可以改变它们以满足它们的需要。和/或用户需要某种关于新服务设置的通知 因此,要直接解决这些问题: 如果他们升级套餐并获得新服务怎么办? 使用userServicesSettings保留包设置,并在订阅具有这些设置的包时使用它们,否则忽略它们;但保留它们以备将来更改服务(这又是一个商业问题) 如何将新的服务设置设置为或仅限于用户已订阅的服务? 这只是订阅、打包、打包服务和服务设置之间的连接。(除非您想维护软件包版本;但这是一个完全不同的思路)
如果我添加一个新服务怎么办?那么您添加了新的服务设置,UserServiceSettings是默认的(或者向用户提供了通知,以便他们可以填写他们想要的内容,或者两者都有),现在您有了所需的详细信息。默认值在动态环境中很有用,因为人们不需要他们来做决定。默认值表示,除非您更改它,否则您将得到它;使人们接受默认或采取行动。您的问题主要是关于随时间的变化。但是您的模型是暂时静态的——它没有认识到数据关联在过去或将来可能是不同的 此模型适用于仅涉及当前部署的订阅的生产环境。但为了能够执行基于时间的快照或管理服务转换,您必须至少向packageServices表(服务到包关联的开始/结束日期)添加时间戳,并且类似于subscriptions表 如果他们升级套餐并获得新服务怎么办? 包需要独立于订阅而存在。如果包必须包括可选服务,那么您的模型需要一个附加的子架构,用于带有时间戳的“每个客户服务配置”。因此,假设没有可选服务,上述模型将起作用: