2009-07-29 9 views
0

私は、ビジネスデータベースのメンバーシップ購入を受け入れて記録するために、私の組織のメンバーシップ製品をモデル化しようとしています。いつかは、購入がオンラインで行われ、自動的にビジネスデータベースに入れられることを願っています。メンバーシップ製品のデータスキーマ

問題は、メンバーシップ製品が全面的に使用されていることです。組織には4種類の組織があります。各組織タイプごとに別々の価格表があります。組織の属性によって、スケジュールから支払う価格が決定されます(収益が2百万ドルから5百万ドルの間に2000ドルを支払う場合など)。各料金スケジュールで使用される属性は異なります。たとえば、企業は年間収益に応じて支払いを行いますが、フルタイムでの学生の入学料は学校のメンバーがフルタイムとパートタイムの学生登録番号を提供することによって計算します。もっと複雑にするために、ディスカウントプログラムがあります(例えば、早期更新のための12の価格のための15か月、under-resourced学校の割引など)。その後、メンバーは一度に複数の条件を購入するオプションを持っています。時には、部分的な部分条件を月間購入することも許可しています(月は最小単位です)。

そして、私は今、製品とトランザクションのデータスキーマを一般的なものにして、メンバーシップの購入に加えてイベント登録やプログラムの登録など、すべての購入の記録のデータソースにすることができます。

ヘルプ!私はこれが標準の商取引データスキーマであると言われてきましたが、少なくとも私が知る限り、私がラインで見つけることができたすべてのサンプルデータスキーマは上記を行うことができませんでした。誰かがこの種のことをするスキーマを見たことがありますか?あなたが持っているなら、それを私と分かち合うことができますか?

その他のリードについても同様に高く評価されます。ありがとう!

+0

私は実際に3つのレベルの関与を選択できるので、ビジネス組織タイプの3つの価格スケジュールがあることを忘れました。 –

+0

また、少なくとも12ヶ月に1回、会員価格のスケジュールとカテゴリが変更されることを忘れてしまいました。すべての価格設定オプションのすべての順列を個々の製品として定義すると、会員だけのために何百もの製品が存在します。 –

+0

メンバーシップについては、「先月または昨年にXメンバーシップ製品を購入したメンバーの数」という質問に決して答えないようにすることは価値があります。代わりに、私は "先月に加わったxタイプのメンバーの数と、どのくらいの会員収入をもたらしたのですか?"と答えるように求められます。だから私の最初の本能は購入を記録し、メンバーシップ申請書に製品定義と価格スケジュールを残すことでした。なぜなら、私たちがDBに対して質問するのは、用語、開始日、会費金額、メンバーのタイプだけです。 –

答えて

1

ビジネスロジックをデータ設計から分離する必要があるようです。この問題に適用される最も単純なデータ構造を考えてみて、それらの上にメンバーの論理を置いてください。例えば

:このの上に

CREATE TABLE payment(
    memeber_id INT, 
    payment INT, 
    expected_date DATE, 
    payment_date DATE); 

CREATE TABLE credit(
    memeber_id INT, 
    credit INT, 
    last_movement` INT, 
    next_movement INT, 
    last_movement DATE,); 

CREATE TABLE member(
    id INT, 
    membership_plan INT, 
    ...) 

は、たとえば、あなたは非常に簡単にビジネスルールが設定されているなど、期待されていたものは何でも、メンバーは左、信用を持っているかどうか、彼が支払っている照会することができますソフトウェア、このデータの上に。各メンバーシッププランには、それを統治する規則が異なるはずです。

さらに構成可能な方法でビジネスロジックを構築する予定がある場合は、これらの計画をサポートするための一般的なEntity-Atribute-Valueテーブルを追加することもできます。極端に言えば、各メンバーはこのテーブルに対して上書きすることさえできます。

CREATE TABLE member_attributes(
     membership_type INT, 
     attribute VARCHAR(30), --for example 'Monthly Pay', 'Membership duration' 
     value INT)