Database design E-R建模和业务规则

Database design E-R建模和业务规则,database-design,entity-relationship,Database Design,Entity Relationship,如何在E-R模型中插入这样的概念: “用户可以插入参与同一事件的其他用户的评估” 必须从批准的活动订阅中扣除参与人数。 我从订阅(与用户和事件相关)到自身建立了一个递归关系“评估”,但我不确定它是否正确。 也许对于这样的概念,我需要使用业务规则? 谢谢。考虑以下示例ER图: 我们可以通过以下方式在SQL中实施评估和参与: CREATE TABLE Participation ( UserID INT NOT NULL, EventID INT NOT NULL, PRI

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

谢谢。

考虑以下示例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);
但是,在这种情况下,引用参与的一对重叠外键约束将强制执行所需的业务规则:

ALTER TABLE Evaluation
ADD FOREIGN KEY (ScoringUserID, EventID) REFERENCES Participation (UserID, EventID),
ADD FOREIGN KEY (ScoredUserID, EventID) REFERENCES Participation (UserID, EventID);
有一些冗余,但它是受控的,需要一致性。或者,也可以使用触发器来实现相同的效果


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

ER和其他数据建模规程用于建模知识,而不是系统功能。即使评估必须与数据、注释和分数一起保存?这不是一个实体吗?现在你走对了。实体、它们的属性以及它们之间的关系是什么?“用户可以插入评估…”表示系统功能。我们现在知道,评估有一些“数据”、评论和分数,可能涉及评分用户、评分用户以及(参与)事件。其他实体呢?目前还不清楚订阅包含哪些内容,或者从中扣除参与度意味着什么。您是否希望对约束进行建模,如“评估的评分用户和评分用户必须同时参与同一事件”?ER图是概念模型,仅表示实体、属性和关系。业务规则和约束可以注释到图表中,但不能直接表示。当我们进行物理建模时,我们可以使用外键约束之类的东西来强制执行模型的有效性。事件订阅是另一个实体(我认为),具有一些属性:日期、角色、状态(已批准/未批准)。必须有特殊类型的用户批准每个订阅。“您是否希望对约束进行建模,如“评估的评分用户和评分用户必须同时参与同一事件”?“完全正确!哦…哇!非常感谢,但我有点困惑。我有两种类型的用户:简单用户(US)和高级用户(UP)。创建事件的UP用户必须验证该特定事件的每个订阅。这是你所说的约束之一,我不能在ER图中表示吗?另外,对于每个订阅,我需要记住一些属性,如日期、状态和角色(每个用户可以订阅一个事件,如球员或裁判)。您可以通过用户实体上的适当属性表示简单/高级用户。您可以在事件和用户之间添加CreatedByUser关系。可以在订阅实体上添加已验证的属性(以及所需的任何其他属性)。但是,实施身份验证和验证过程将是应用程序的功能,而不是数据库的功能。这是我的精心设计(只是一个片段)。为了简单起见,我遗漏了一些东西。你怎么认为?我使用了递归关系(评估)。很抱歉,我对您的项目了解不够,无法对您的模型进行评论。