Database 弱实体是否总是暗示其父实体的ID依赖关系?

Database 弱实体是否总是暗示其父实体的ID依赖关系?,database,relational-database,entity-relationship,erd,Database,Relational Database,Entity Relationship,Erd,我正在尝试映射此处描述的关系: 团队进行游戏。一个团队一个赛季最多玩40场游戏。每场游戏由2个团队进行。您必须记录一场游戏中每个团队的得分。团队可能永远不会玩游戏,但如果一场游戏已安排,则必须有2个团队参与其中 这里的实体是团队和游戏。两者都有一个与实体关联的ID,即teamID和gameID。常识告诉我,游戏应该是一个弱小的实体,因为没有团队就没有游戏。然而,若游戏有自己独特的ID,这是否意味着它不是一个弱实体 另外,我如何为实体游戏创建关系表?如果一场比赛中正好有两支球队,那么比赛的外键是什

我正在尝试映射此处描述的关系:

团队进行游戏。一个团队一个赛季最多玩40场游戏。每场游戏由2个团队进行。您必须记录一场游戏中每个团队的得分。团队可能永远不会玩游戏,但如果一场游戏已安排,则必须有2个团队参与其中

这里的实体是团队和游戏。两者都有一个与实体关联的ID,即teamID和gameID。常识告诉我,游戏应该是一个弱小的实体,因为没有团队就没有游戏。然而,若游戏有自己独特的ID,这是否意味着它不是一个弱实体


另外,我如何为实体游戏创建关系表?如果一场比赛中正好有两支球队,那么比赛的外键是什么?我会在表中有一个teamOneID*和一个teamTwoID*吗?

弱实体集不是通过依赖另一个实体集来确定的。弱实体集是无法通过自身属性识别的实体集,并且依赖于与常规实体集的关系来确定其标识。如果
Game
有自己的代理标识符,则它是一个常规实体集

依靠关系生存的概念称为完全参与。有关更多信息,请参阅我的答案


至于外键列的命名,我见过许多设计使用
homeTeamID
awayTeamID
,尽管如果两个团队都在主场之外比赛,角色的分配是任意的。对称关系可能会给数据库设计带来困难。如果没有打破对称性的规则,您的查询将不得不为任何给定的teamID检查两个字段,这会使查询复杂化,效率低下。我以前使用过的一种方法是将较低的值存储在
teamOneID
中,而将较高的值存储在
teamTwoID

弱实体集并不是通过依赖另一个实体集来确定的。弱实体集是无法通过自身属性识别的实体集,并且依赖于与常规实体集的关系来确定其标识。如果
Game
有自己的代理标识符,则它是一个常规实体集

依靠关系生存的概念称为完全参与。有关更多信息,请参阅我的答案


至于外键列的命名,我见过许多设计使用
homeTeamID
awayTeamID
,尽管如果两个团队都在主场之外比赛,角色的分配是任意的。对称关系可能会给数据库设计带来困难。如果没有打破对称性的规则,您的查询将不得不为任何给定的teamID检查两个字段,这会使查询复杂化,效率低下。我以前使用的一种方法是将较低的值存储在
teamOneID
中,将较高的值存储在
teamTwoID

中,假设一个实体类型W有两个可选标识符(称为键A和键B)。键A由依赖于与另一个实体的关系的属性组成。键B由不依赖于其他实体的属性组成。因此,W可以通过其自身属性(B)来识别。就我所知,W被称为“弱”当且仅当A被视为“主要”标识符。如果B被认为是主要的,那么W不是弱的。在这些情况下,我认为弱区分是任意的,并且与W是否可以通过其自身属性识别是正交的。@sqlvogel ER模型主要关注主键,而不是备用键。除了关于选择主键的几句话之外,
实体关系模型:面向数据的统一视图
中的所有内容都只关注主键。从关系的角度来看,弱实体集和常规实体集之间的区别看起来是任意的,但就这一点而言,实体集和值集之间的区别,或者属性和关系之间的区别也是任意的。假设一个实体类型W有两个可选标识符(称它们为键a和键B)。键A由依赖于与另一个实体的关系的属性组成。键B由不依赖于其他实体的属性组成。因此,W可以通过其自身属性(B)来识别。就我所知,W被称为“弱”当且仅当A被视为“主要”标识符。如果B被认为是主要的,那么W不是弱的。在这些情况下,我认为弱区分是任意的,并且与W是否可以通过其自身属性识别是正交的。@sqlvogel ER模型主要关注主键,而不是备用键。除了关于选择主键的几句话之外,
实体关系模型:面向数据的统一视图
中的所有内容都只关注主键。从关系的角度来看,弱实体集和常规实体集之间的区别看起来是任意的,但就这一点而言,实体集和值集之间的区别,或者属性和关系之间的区别也是任意的。