8

スポーツセンターのメンバーシップを管理するために、サードパーティ製品を使用しています。いくつかのメンバーシップタイプ(例:ジュニア、学生、スタッフ、コミュニティ)といくつかのメンバーシップステータス(例:年次、アクティブ、非アクティブ、一時停止)があります。残念ながら、この製品はメンバーの現在のメンバーシップタイプとステータスのみを記録します。メンバーのタイプとステータスが時間の経過とともにどのように変化したかを追跡できるようにしたいと思います。

現在、製品のデータベース設計にアクセスできます。これはSQLServerで実行され、製品のテーブルに対して独自のSQLクエリを定期的に実行して、独自のテーブルを生成します。次に、テーブルをExcelのピボットテーブルにリンクして、グラフを作成します。したがって、私たちはデータベース設計とSQLに精通しています。しかし、私たちはこの問題に最善の方法で取り組む方法について立ち往生しています。

この製品は、メンバーのメンバーシップの購入と、その開始日と有効期限を記録します。そのため、そのデータをさかのぼって、任意の時点でメンバーのタイプとステータスを判別できます。たとえば、2007年1月1日にジュニアメンバーシップを購入し、2007年12月31日に有効期限が切れ、2008年6月1日に学生メンバーシップを購入した場合、ステータスがアクティブから非アクティブ、アクティブに変わったことがわかります(1月)それぞれ2008年1月1日と2008年6月1日)とそのタイプはジュニアから学生になりました(2008年6月1日)。

基本的に、メンバーのタイプとステータスのプロパティを一時的なプロパティまたは有効性a-la Fowler(または時間とともに変化するその他のもの)に変換したいと思います。

私たちの質問(最後に:)-上記のことを考えると、このメンバー情報を保持するためにどのデータベーステーブルの設計を使用することをお勧めしますか。MemberIDの列があるので、既存のMemberテーブルにキー入力できると思います。また、メンバーのステータスとタイプ、およびメンバーが保持されていた日付範囲を保存する必要があります。このテーブルに対してクエリを簡単に記述して、特定の時点での各タイプとステータスのメンバーの数を判断できるようにしたいと考えています。

更新2009-08-25:傍観されており、提案されたソリューションをまだ試す機会がありません。すぐにそうすることを望み、結果に基づいて答えを選択します。

4

4 に答える 4

8

システムがすでに作成されて配置されている場合、この問題への最も簡単なアプローチ(および既存のデータベース/コードへの影響が最も少ないアプローチ)は、MemberID、ステータス、タイプ、および日付の列を含むメンバーシップ履歴テーブルを追加することです。次に、UPDATEおよびINSERTトリガーをメインメンバーテーブルに追加します。これらのトリガーが起動すると、メンバーの新しい値(ステータス変更の日付とともに)がメンバー履歴テーブルに書き込まれます。次に、このテーブルをクエリして、各メンバーの履歴を取得できます。

これは実装が非常に簡単で、既存のシステムにはまったく影響しません。

無料会員になるためにこれを書きます。:)

于 2009-08-20T01:12:08.913 に答える
2

JoeCelkoの「SQLforsmarties-高度なSQLプログラミング」を読むことをお勧めすることはできません。彼は、時制データベースの設計と、時制射影、選択、および時制結合クエリを(効率的かつ効果的に)実行する方法に関する章全体を持っています。そして、私は彼がこの投稿の彼の章で言っていることを説明しようとさえするために彼を正義にしないでしょう。

于 2009-08-25T11:40:48.053 に答える
1

スタースキーマに編成されたレポートデータベースを作成します。メンバーシップディメンションは時間的に配置されるため、同じメンバーに対して異なる時点で異なる行が存在します。そうすれば、ファクトテーブルのさまざまな行が履歴のさまざまなポイントに関係する可能性があります。

次に、メインデータベースから定期的に(たとえば週に1回)レポートデータベースを更新するための更新手順を作成します。これが主な仕事になるところです。

次に、レポートをレポートデータベースから削除します。スタースキーマにピボットテーブルと同じことをさせるのは非常に簡単です。必要に応じて、レポートデータベースの前にある種のOLAPツールを用意します。

これは大変な作業ですが、時間の経過とともに報われるでしょう。

于 2009-08-20T05:31:36.940 に答える
0

メンバーシップ情報を、開始日と終了日を含む独自のテーブルに配置します。顧客を別のテーブルに保管します。常に「現在の」メンバーシップ情報が必要な場合、これは苦痛ですが、クエリまたはトリガーのいずれかを介してそれを回避する方法はたくさんあります。

于 2009-08-20T01:21:56.827 に答える