【发布时间】:2019-09-21 00:54:12
【问题描述】:
我正在为赛车游戏开发数据库。在此图中,必须在赛道上进行比赛(因此必须在表格 Race 上引用 TrackID),并且我可能有一个赛道,其中发生了很多甚至没有比赛:
所以从 Race 到 Track 的最小基数应该是 1,将关系设置为 Identifying。但这也会使 Table Race 上的 TrackID 成为 PK。而且我不明白为什么我需要它。所以我想我宁愿把它作为一个“必需的”FK;除了不作为 PK 之外还有什么变化?将 TrackID 作为 Race 上的 FK,Microsoft Visio 会自动将该最小基数设置为 0,这让我摸不着头脑...
我是建模数据库的新手,这个问题可能很明显,但请帮助我理解这一点。
【问题讨论】:
-
我刚碰到这个:stackoverflow.com/questions/6095527/is-this-a-flaw?rq=1 所以...这是 visio 的缺陷吗?
-
请告诉我们您正在使用什么信息建模参考。为什么你认为你关心“差异”? subrow value 当它出现在 PK 或 FK 列列表中时是 PK 或 FK。 PK & FK 列列表声明说明了可能出现的表值。我们声明它们以便 DBMS 强制执行它们。我们不需要他们查询。 (某些声明集合强制执行其他声明,因此我们不需要声明。)您是什么意思“我不明白我为什么需要它”? TrackId不是Race的PK。你对“识别”有误解。请参阅“识别”、PK 和 FK 的定义。
-
我只关心真的没有赛道就没有比赛;我说我不明白为什么我需要 TrackID 作为 PK,因为我不想在每次搜索比赛时都指定赛道。 TrackID 不是图片上 Race 的 PK,因为我是这样设置的,我将它设置为 req'd 列,即使它是必需的,从 Race 到 Track 的最小基数仍然为零,至少在概念上没有不能保证每场比赛都在赛道上进行(这就是我试图展示的)。这是为什么?这主要是让我感到困惑的地方。
-
这里有两个独立的问题:您想要什么设计以及如何将其融入您的工具。我正在解决您写基本术语的奇怪方式,并且可能误解/误解了它们。重新摔跤 Visio:有不同的方法来标记基数。我读过它本身就是IDEF1X(参见维基百科'E-R 模型'重新约束。) 数据库 是你想要的方式,即使图表不是? Visio 可能不容易支持您使用的约定。这就是我要求你告诉我你的推理是什么的原因之一。阅读文档。 ...
-
为了澄清在 ER 模型中识别关系与强制角色,请参阅我对Is optionality (mandatory, optional) and participation (total, partial) are same?的回答
标签: database database-design foreign-keys visio erd