Database 什么';将所需的外键与主键之间的区别是什么?

Database 什么';将所需的外键与主键之间的区别是什么?,database,database-design,foreign-keys,visio,erd,Database,Database Design,Foreign Keys,Visio,Erd,我正在为一款赛车游戏开发一个数据库。在这个图表中,比赛必须在一条赛道上进行(因此必须在table race上引用TrackID),我可能有一条赛道,其中有很多甚至没有比赛: 因此,从比赛到赛道的最小基数应该是1,将关系设置为标识。但这也将使桌面上的TrackID比赛成为一种PK。我不明白为什么我需要这个。所以我想我宁愿把它作为“必选”的FK;除了不把它作为PK,还有什么变化?使用TrackID作为比赛中的FK,Microsoft Visio会自动将最小基数设置为0,这让我抓狂 我不熟悉数据库建

我正在为一款赛车游戏开发一个数据库。在这个图表中,比赛必须在一条赛道上进行(因此必须在table race上引用TrackID),我可能有一条赛道,其中有很多甚至没有比赛:

因此,从比赛到赛道的最小基数应该是1,将关系设置为标识。但这也将使桌面上的TrackID比赛成为一种PK。我不明白为什么我需要这个。所以我想我宁愿把它作为“必选”的FK;除了不把它作为PK,还有什么变化?使用TrackID作为比赛中的FK,Microsoft Visio会自动将最小基数设置为0,这让我抓狂


我不熟悉数据库建模,这个问题可能会让我明白,但请帮助我理解这一点。

识别种族有两种方法。您可以为每个种族分配一个唯一的RaceId,在这种情况下,RaceId标识该种族。这是几乎所有设计师都会采用的常见方式。这是我会走的路,在没有任何理由不走的情况下

也可以指定仅在单个赛道中唯一的赛道ID。也就是说,可能有两场Id为123的比赛,但一场在赛道1上,另一场在赛道2上。我想不出有什么理由这样做,但这是可以做到的。还有其他的用例,这种上下文依赖是有意义的,但不是这个用例

在第一种情况下,您已经绘制了图表,TrackID将是一个FK,但不是PK的一个组件。它可以被约束为不为null,但这并不意味着它是PK的一部分

在第二种情况下,Race表中的TrackId将像以前一样是一个FK。但是PK现在将包括RaceId和TrackId。这可能就是你所说的确定关系


我不会顺便说一句,膝关节台似乎以我描述为第二种情况的方式使用LapId。很多比赛都有第5圈,但你必须同时知道圈号和比赛号才能知道你在谈论哪一圈。

有两种方法来识别比赛。您可以为每个种族分配一个唯一的RaceId,在这种情况下,RaceId标识该种族。这是几乎所有设计师都会采用的常见方式。这是我会走的路,在没有任何理由不走的情况下

也可以指定仅在单个赛道中唯一的赛道ID。也就是说,可能有两场Id为123的比赛,但一场在赛道1上,另一场在赛道2上。我想不出有什么理由这样做,但这是可以做到的。还有其他的用例,这种上下文依赖是有意义的,但不是这个用例

在第一种情况下,您已经绘制了图表,TrackID将是一个FK,但不是PK的一个组件。它可以被约束为不为null,但这并不意味着它是PK的一部分

在第二种情况下,Race表中的TrackId将像以前一样是一个FK。但是PK现在将包括RaceId和TrackId。这可能就是你所说的确定关系


我不会顺便说一句,膝关节台似乎以我描述为第二种情况的方式使用LapId。很多比赛都有一圈5,但你必须知道圈Id和比赛Id,才能知道你在谈论哪一圈。

这是一个相当复杂的话题,也是一个已经讨论过的话题

让我们把Visio所做的事情放在一边——许多ERD工具太聪明了,或者是有缺陷

标识关系是指没有父项(轨迹)的子项(种族)无法存在,并且子项的主键包括父项的主键的关系。一个常见的例子是订单(父订单)和订单行(子订单)-订单行的主键可能是订单主键和序列号的组合。删除订单时,将删除所有订单行。子项上的外键是不可变的,并且是强制的

非标识关系是指子项可以在没有父项的情况下存在,或者父项可能更改的关系

非标识关系可以是强制性的,也可以是可选的。声明强制外键需要标识关系是错误的


我相信,在你的情况下,你有一个不确定的关系-比赛可以安排,但随后改变轨道。我不认为“跟踪id”应该是一成不变的;甚至可能在赛道达成一致之前就安排了比赛,因此这种关系可能是可选的。

这是一个相当复杂的话题,我们已经就此进行了讨论

让我们把Visio所做的事情放在一边——许多ERD工具太聪明了,或者是有缺陷

标识关系是指没有父项(轨迹)的子项(种族)无法存在,并且子项的主键包括父项的主键的关系。一个常见的例子是订单(父订单)和订单行(子订单)-订单行的主键可能是订单主键和序列号的组合。删除订单时,将删除所有订单行。子项上的外键是不可变的,并且是强制的

非标识关系是指子项可以在没有父项的情况下存在,或者父项可能更改的关系

非标识关系可以是强制性的,也可以是可选的。声明强制外键需要标识关系是错误的


我相信,在你的情况下,你有一个不确定的关系-比赛可以安排,但随后改变轨道。我不认为“跟踪id”应该是一成不变的;甚至可能在赛道商定之前就安排了比赛,因此这种关系可能是可选的。

赛道与赛道之间的关系是{1}:{0,n},也就是说,每一场比赛只在一条赛道上进行,而每一条赛道都有零到多场比赛

  • 轨迹ID唯一标识轨迹和henc