在 ER 图中,我怎么知道您何时使用一个或多个?

In an ER Diagram, how do I know when you use one or many?

我试图理解 ER 图中的基数,从一个游客访问城市的简单示例开始。考虑一下,你可以有很多游客访问许多城市,所以我画了如图所示的ER图。 Visitor是一个Entity,有name等属性,Visits是以VisitorID和CityID为主键和日期等其他属性的关系,City是一个entity,有country等属性。这意味着 0 到许多游客可以访问 0 到许多城市。这是否意味着在具有此 ER 图的数据库中,我将拥有三个表?一份给 Visitor,一份给 City,一份给 VisitCity?我对基数的理解正确吗?

是的,没错。你的图显示 0 到许多游客可以访问 0 到许多城市。所以在这种情况下你是对的。正如您所说,您已将您的中间人命名为-table visitCity.

但假设您需要有一个数据库,访客只能访问 1 个城市。你会有一对多的关系。这意味着您不需要为此使用中间-table。所以你最终只会得到 2 tables。

只是因为像 "many visitors can visit many cities" 这样符合逻辑的东西并不意味着是真的。要求是制定这些规则的原因(客户指定的项目说 he/she 需要什么。或者如果你还在学校,这将是分配给你的论文,里面有故事)。所以在创建数据库的时候你要根据listen/read的要求非常仔细的决定什么时候用什么。但是通过阅读你所说的,我认为你走在正确的轨道上:)

是的,您正确描述了这些关系。 N:M 基数需要三分之一 table.

访问也可能包含其他信息。例如,由于访问者不能同时出现在两个地方,因此可能存在关联的时间段。

访客可能与城市有另一种关系——例如,born_in 具有不同的基数,即 N:1,这意味着许多人出生在同一个城市(但每个人都只出生在一个城市!)为此,born_in 将是访客的属性。

是的,完全正确。

如果您希望将您的数据库保持在 1NF 中,则每次您面对 N x N 基数时,都必须使用两个实体的键创建一个新的 table。

关于规范化的更多信息here.