質問

私たちは、スポーツセンターのメンバーシップを管理するために、サードパーティ製品を使用しています。我々はいくつかのメンバーシップの種類(例えばジュニア、学生、職員、地域社会)といくつかのメンバーシップのステータスを持っている(例えば、年間、アクティブ、非アクティブ、一時停止します)。残念ながら、製品が唯一のメンバーの現在のメンバーシップの種類と状態を記録します。私は、私たちのメンバーの種類や状態が時間の経過とともに変化してきた道を追跡できるようにしたいと思います。

現時点では、製品のデータベース設計へのアクセス権を持っています。これは、SQL Server上で実行され、私たちは定期的に私たち自身のテーブルを生成するために、製品のテーブルに対して当社独自のSQLクエリを実行します。私たちは、その後、グラフを生成するためにExcelでピボットテーブルに私たちのテーブルをリンクします。だから我々は、データベース設計とSQLに精通しています。しかし、我々は最高のこの問題にアプローチする方法へと立ち往生してます。

の製品は、その会員の購入とその開始と有効期限の日付を記録します。だから我々は、任意の時点でメンバーの種類や状態を判断するために戻って、そのデータによって動作することができます。彼らは2007年1月1日にジュニアのメンバーシップを購入し、それが2007年12月31日に期限が切れた後、彼らは2008年6月1日に学生のメンバーシップを購入した場合、我々は彼らの状況は月に(アクティブにアクティブから非アクティブに行ってきました見ることができます1、2008年にそれぞれ2008年6月1日、)とそれらのタイプは、()2008年6月1日にジュニアからの学生に行ってきました。

基本的に、私たちは時間的性質のかにメンバーの種類と状態のプロパティを有効にしたいと思います< href = "http://martinfowler.com/ap2/effectivity.html" のrel = "noreferrer"> effectivities のA-ラ・ファウラー(または時間とともに変化するいくつかの他の事)。

私たちの質問(最終的に:) - 上記で与えられた:どのようなデータベースのテーブルのデザインあなたは私たちが、このメンバー情報を保持するために使用をお勧めします。私たちは、既存のメンバー・テーブルにキー入力することができますので、それはMEMBERIDの列を持っているだろうと想像します。また、メンバーのステータスと種類とそれらを保持した日付範囲を格納する必要があります。私たちは、簡単に、我々は任意の時点で持っていたそれぞれのタイプと状態のどのように多くのメンバーを決定するために、このテーブル(複数可)に対してクエリを書くことができるようにしたいと思います。

UPDATE 2009-08-25:サイド追跡されており、まだ提案されたソリューションを試してみる機会がなかったです。こんなに早く行うことを期待し、その結果に基づいて回答を選択します。

役に立ちましたか?

解決

この問題への最も簡単な方法(と少なくとも既存のデータベース/コードに影響を与えます1)、あなたのシステムがすでに書かれていることを考えると場所で、MEMBERIDが含まれているメンバーシップの履歴テーブルを追加することで、ステータス、種類、日付列。そして、メインメンバテーブルにUPDATEとINSERTトリガを追加します。これらのトリガーが起動するときには、メンバー履歴テーブルに(ステータス変更の日付と一緒に)メンバーの新しい値を書き込みます。その後、ちょうど各メンバーの履歴を取得するには、このテーブルを照会することができます。

これは、実装が非常に簡単です、とのすべての既存のシステムに影響を与えません。

私は、無料のメンバーシップのためにあなたのためにこれを記述します。 :)

他のヒント

私はジョー・セルコの読み取りに十分なあなたをお勧めすることはできません「スマーティーズのSQLを - 高度なSQLプログラミング」。彼は一時的なデータベースの設計上の全体の章があり、どのように(effecientlyかつ効果的に)時間的投影を実行し、選択と時間的には、クエリに参加します。そして、私も彼がこの記事で彼の章で述べているかを説明しようとする彼に正義をしないだろう。

私は、スター・スキーマに編成されたレポートデータベースを作成します。異なる時点で、同じ部材に対して異なる行が存在することになるように会員寸法は、一時的に配置されることになります。ファクトテーブルでそのように異なる行が歴史の中で異なる点に関連する可能性があります。

それから私は、メインのデータベースから、1週間と言う、定期的にレポートデータベースを更新するための更新手順を作成します。主な仕事は来る場所です。

そこで、私は、レポートデータベースからレポートを駆動します。これは、スター・スキーマは、ピボットテーブルが行うのと同じことを行う作るために非常に簡単です。必要であれば、私は、レポートデータベースの前に座ってOLAPツールのいくつかの種類を取得したい。

このはたくさんの仕事であるが、それは時間をかけてオフに支払うことになる。

私は、開始日と終了日とそれ自身のテーブル内の会員情報を入れるでしょう。別のテーブルに顧客を維持します。あなたは、「現在」の会員情報のすべての時間を必要とするが、いずれかのクエリまたはトリガーによってその周りを取得するための多くの方法がある場合、これは苦痛です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top