这种方法是正确的还是我必须创建两个以上的表?
对于您提出的具体问题,该方法是正确的,但它不是关系型(注意标签),因此它缺乏适当或预期的约束。
我想将 ER 图转换为 RM Schema
简短的回答是,你不能。当然会有问题。
实体关系 • 不受约束
首先让我说,您使用有意义的键非常好,它们是合乎逻辑的,因此是关系的。
- 这超越了 1960 年代的记录归档系统,这些系统被“理论家”推广和推销为“关系”。此类原始系统以每个文件上的
Record ID 为代表,声明为“密钥”,这让任何人都感到困惑,因为它没有任何密钥的属性,更不用说关系密钥了。
但是,您还没有完整的关系上下文,您没有使用复合键,因此您的模型缺乏关系完整性;关系力量;以及符合 E F Codd 博士的关系模型的模型所具有的关系速度。换句话说,您可能不知道关系数据库中的可能性,或者关系数据库的基本要求是什么。
你有这个:
这有各种问题,这是您所学的原始 RFS 的典型特征。如:
分配给团队的队长不受那个团队的限制(它允许任何玩家成为任何的队长团队)
玩家绝对是独立的,玩家除了参与团队之外不存在(它允许独立玩家)。
所有关系都是非识别性(虚线),这是碎片系统的典型特征,其中每个表都被错误地声明为“独立”。
实体关系 • 关系
如果我们将其提升为关系:
-
团队是独立的
-
玩家依赖团队
- 玩家PK是(团队,玩家)
- 关系
团队由 0 到 n 个玩家组成
是识别(实线)
-
现在,队长在 Team 中的 FK 是 Player ( Team, Player ) 中引用的 PK
关系
玩家队长 0 或 1 队(相对于不受约束的 0 到 n)
现在受到影响,因为付款人只属于一个团队
DDL
同样,现在创建表还为时过早,但既然您正在考虑这样做:
创建表团队(
团队 CHAR(30) NOT NULL,
船长 CHAR(50) NOT NULL,
约束pk
主键(名称),
约束队长
FOREIGN KEY(团队,队长)
参考团队(团队,球员)
)
创建表播放器(
团队 CHAR(30) NOT NULL,
播放器 CHAR(50) NOT NULL,
约束pk
主键(球队,球员),
约束由_of
外键(团队)
参考团队(团队)
)
- 虽然
name 之类的列名对于属性是正确的,但对于标识符 则不正确,标识符 应该以其所标识的事物命名,例如team、@ 987654330@等
- 如果表
team有一个属性name,与短标识符team分开,那肯定会被命名为name。
符号
评论
基本思想是……每颗钻石都有一张桌子。
废话。
在 ER 建模的那个阶段,每颗钻石代表一个未解决的关系,而不是一张表格。没有“转换”,它不是一个定义的步骤(这只是推动 ER 建模的人必须切换到真正的建模方法的点,正是因为 ER 建模受到严重限制)。建模的目的,不管是否使用ERD;或IDEF1X;或彩色珠子,是对文章的渐进理解,即。从未解决进展到已解决。
这是一个智力过程,而不是文书过程。
因此,在 ER 建模的那个阶段(您的图表),为了进入下一阶段,每个钻石都需要解析。也就是说,ER 图在 ER 建模上下文中甚至都不完整(同样,还远未准备好实施,或“转换”为关系建模方法)。
-
第一件事是,每颗钻石都需要被确定和命名(一颗未命名的钻石证明它没有被解析)。这将是一个很好的开始,因为它实际上是什么。
- 未解决的关系可以确认为已解决的关系。名称将是一个动词短语,从父级 (1) 读取到子级 (n)。
- 未解决的关系可能会变成一个表。这个名字会是一个名词,因为它已经变成了一个事物,事物是由名词命名的。
- 这是您的 ERD 的样子,当您停留在那个阶段并继续进行时(只是命名的钻石,尚未解决),请亲自检查一下 Progressed ERD。
-
每个多对多关系,例如:
Fan 跟随 0 到 n Players,并且
Player 后跟 0 到 n Fans
保持n对n的关系
- 它实现(意思是稍后,在模型坚如磐石并准备好实现的时候)作为关联表
PlayerFan。
- 在建模时,它仍然是 n 对 n 关系,钻石被移除,表示分辨率。
每个 一对多 关系,例如:
每个团队由 0 对 n 玩家组成
始终保持关系,而不是表。钻石被移除。
当然,1 对多 关系可能会发展到表格...但这是进一步建模的结果,经过多次迭代,采用模型中的其他项目考虑到这一点,而不是自动“转换”。
这就是我们在现实世界中不使用 ER 建模的原因,我们使用专为关系建模而设计的东西,可以轻松处理键等关系特征,消除“转换”和随之而来的废话。