2

私はサブスクリプション ベースのサービス プロバイダーをモデル化しようとしています。ユーザーがさまざまなサービスのパッケージにサブスクライブする次のモデルを定義しました。各パッケージ レベルには 1 つ以上のサービスが含まれます。

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

ただし、各サービスには独自のユーザー定義設定があり、各サービスには、サービス データを格納するための他のエンティティの配列が関連付けられている場合があります。特定のユーザーの各サービスのデータ エンティティを処理できますが、設定テーブルに困惑しています。ユーザーとサービスをキーにした「ServiceSettings」テーブルを作成することを考えましたが、それは少し奇妙に思えます。このアプローチでは、次のような疑問が残ります。

  1. パッケージをアップグレードして新しいサービスを取得したらどうなりますか?
  2. 新しい ServiceSettings は、ユーザーが購読しているサービスのみに設定または制限するにはどうすればよいですか?
  3. 新しいサービスを追加するとどうなりますか?

私は正しい道を進んでいますか、それとも欠けているように見える別の選択肢がありますか?

前もって感謝します!

4

2 に答える 2

0

あなたの質問は、主に経時変化に関するものです。ただし、モデルは時間的に静的です。データの関連付けが過去または将来で異なる可能性があることを認識していません。

このモデルは、現在デプロイされているサブスクリプションのみに関係する運用環境に適しています。ただし、時間ベースのスナップショットを作成したり、サービスの移行を管理したりできるようにするには、少なくともタイムスタンプを packageServices テーブル (サービスとパッケージの関連付けの開始日/終了日) に追加する必要があります。同様に、サブスクリプション テーブルにも追加する必要があります。

パッケージをアップグレードして新しいサービスを取得したらどうなりますか? パッケージは、サブスクリプションとは別に存在する必要があります。パッケージにオプションのサービスを含める必要がある場合、モデルにはタイムスタンプ付きの「顧客サービス構成ごと」の追加のサブスキーマが必要です。したがって、オプションのサービスがないと仮定すると、上記のモデルが機能します。

  1. 顧客がパッケージを切り替える場合は、サブスクリプションを終了し、新しいサブスクリプションの新しいレコードを作成します。

  2. 既存のパッケージが再構成された場合は、必要に応じて enddate/新しい packageServices を作成します。

  3. 請求は常に時間の経過とともに変化し、履歴クエリが可能でなければならないため、価格設定も独自のサブスキーマであり、タイムスタンプが付けられ、ユーザーへのリンクが含まれている必要があることに注意してください。

新しい ServiceSettings は、ユーザーが購読しているサービスのみに設定または制限するにはどうすればよいですか?

設定がユーザー固有であると仮定すると、タイムスタンプを使用してサービスをユーザーにリンクする別のサブスキーマが必要になります。このサブスキーマをシンプルに保つ 1 つの方法は、キーと値のペア (serviceID、userID、SettingName、SettingValue、Begin/End Dates) にすることです。

新しいサービスを追加するとどうなりますか?

サービス レコードを作成し、packageServices で開始日とリンクし、ServiceSettingsUser で開始日とユーザーにリンクします。

于 2018-08-24T18:43:30.757 に答える