如何在E-R模型中插入如下概念:
"用户可以插入参与同一事件的另一个用户的评估"
必须从批准的活动订阅中扣除参与情况
我做了一个递归的关系"评估"从订阅(与用户和活动相关)到自身,但我不确定它是否正确。
也许对于这样的概念,我需要使用业务规则?
感谢。
答案 0 :(得分:1)
考虑以下示例ER图:
我们可以在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的脚线,但这并不表示涉及的复合重叠列。