E-R建模和业务规则

时间:2017-07-07 16:07:55

标签: database-design entity-relationship

如何在E-R模型中插入如下概念: "用户可以插入参与同一事件的另一个用户的评估"
必须从批准的活动订阅中扣除参与情况 我做了一个递归的关系"评估"从订阅(与用户和活动相关)到自身,但我不确定它是否正确。
也许对于这样的概念,我需要使用业务规则? 感谢。

1 个答案:

答案 0 :(得分: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);

但是,在这种情况下,引用Participation的一对重叠外键约束将强制执行所需的业务规则:

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

有一些冗余,但它是受控制的,并且需要一致性。或者,可以使用触发器来实现相同的效果。

这些重叠的FK约束不能在ER图中表示,尽管它们可以在逻辑上表示。在表格图中,我们可以在表格之间绘制Crow的脚线,但这并不表示涉及的复合重叠列。