2017-07-07 22 views
0

どのように私はERモデルに挿入することができ、このような概念: 参加が承認さから控除されなければならない
を「ユーザーが同じイベントに参加し、他のユーザーのevalutationを挿入することができます」イベントへのサブスクリプション。
サブスクリプション(ユーザーとイベントに関連する)から自己への再帰的な関係 "評価"を行いましたが、それが正しいかどうかはわかりません。
このような概念の場合は、ビジネスルールを使用する必要がありますか?
ありがとうございます。ERモデリングとビジネスルール

+0

ERおよびその他のデータモデリング分野は、システム機能ではなく、モデリングに関する知識です。 – reaanb

+0

評価をデータと一緒に保存する必要がある場合でも、コメントとスコア?これは実体ではありませんか? – JamieITGirl

+0

今、あなたは正しい道を歩いています。エンティティ、その属性、それらの間の関係は何ですか? 「ユーザーが評価を挿入できる...」は、システムの機能を示します。評価には「データ」、コメント、スコアが含まれていることがわかりました。スコアリング・ユーザー、スコアリングされたユーザー、イベントへの参加(関与)などが考えられます。他のエンティティはどうですか?どのサブスクリプションが構成されているか、またはサブスクリプションの参加を差し引くことが何を意味するかは明確ではありません。おそらく、「評価のスコアリングユーザーとスコアリングされたユーザーの両方が同じイベントに参加している必要があります」というような制約をモデル化したいのですか? – reaanb

答えて

1

は、次の例のER図を考えてみましょう:

Evaluation ERD

私たちのようにSQLで評価し、参加を実装することができます

CREATE TABLE Participation (
    UserID INT NOT NULL, 
    EventID INT NOT NULL, 
    PRIMARY KEY (UserID, EventID), 
    FOREIGN KEY (UserID) REFERENCES User (UserID), 
    FOREIGN KEY (EventID) REFERENCES Event (EventID) 
); 

CREATE TABLE Evaluation (
    EvaluationID INT NOT NULL, 
    ScoringUserID INT NOT NULL, 
    ScoredUserID INT NOT NULL, 
    EventID INT NOT NULL, 
    Score INT NOT NULL, 
    PRIMARY KEY (EvaluationID) 
); 

さて、通常、私たちはこのような評価のための外部キー制約を作成します:

ALTER TABLE Evaluation 
ADD FOREIGN KEY (ScoringUserID) REFERENCES User (UserID), 
ADD FOREIGN KEY (ScoredUserID) REFERENCES User (UserID), 
ADD FOREIGN KEY (EventID) REFERENCES Event (EventID); 

しかし、この場合に必要なビジネス・ルールを施行します参画を参照する外部キー制約を重ねるのペアは:

ALTER TABLE Evaluation 
ADD FOREIGN KEY (ScoringUserID, EventID) REFERENCES Participation (UserID, EventID), 
ADD FOREIGN KEY (ScoredUserID, EventID) REFERENCES Participation (UserID, EventID); 

いくつかの冗長性がありますが、それは制御され、一貫性のために必須です。また、トリガーを使用して同じ効果を達成することもできます。

これらの重複FK制約は、論理図で表現することはできますが、ER図では表現できません。表の図では、表の間にクロウのフットラインを描くことができますが、これは複合オーバーラップする列が含まれていることを示すものではありません。

+0

ああ...うわー!ありがとう、私は少し混乱しています。シンプルユーザー(US)とプレミアムユーザー(UP)の2種類のユーザーがあります。誰がそのイベントを作成したUPユーザは、その特定のイベントに対するすべてのサブスクリプションを検証する必要があります。ERダイアグラムでは表現できない制約の1つですか? さらに、各サブスクリプションごとに、日付、状態、ロールなどの属性を記憶する必要があります(各ユーザーは、プレイヤーや審判のようなイベントにサブスクライブできます)。 – JamieITGirl

+0

ユーザーエンティティの適切な属性を使用してシンプル/プレミアムユーザーを表すことができます。イベントとユーザーの間にリレーションシップCreatedByUserを追加できます。 SubscriptionエンティティでValidated属性(および必要なその他の属性)を追加できます。ただし、認証の強制と検証プロセスは、データベースではなく、アプリケーションの機能となります。 – reaanb

+0

[link](http://oi64.tinypic.com/wjhx1l.jpg) これは私の精緻化(単なるスライス)でした。簡単にするために、私は何かを省略しました。どう思いますか?私は再帰的な関係(評価)を使用しました。 – JamieITGirl

関連する問題