Database 第二正常形式/正常化混淆:主键?复合键?
我正在制定一个数据库计划,我对规范化为第二个标准形式有点困惑。我还担心大量的专栏,我无法正确地找出如何处理它们 这是我的表格,我关注的是Database 第二正常形式/正常化混淆:主键?复合键?,database,database-design,database-normalization,Database,Database Design,Database Normalization,我正在制定一个数据库计划,我对规范化为第二个标准形式有点困惑。我还担心大量的专栏,我无法正确地找出如何处理它们 这是我的表格,我关注的是MatchDetails: 想法1 Player\u ID是另一个表用户的唯一主键MatchID是表匹配项的唯一主键。比赛和球员之间的关系是多对多的 这是复合键吗?在某种意义上,一名球员只能参加一次特定的比赛?MatchID右侧的列是否对复合键具有函数依赖性,即它们对该复合键是唯一的 想法2 在本例中,Participation\u ID是表的唯一主键,
MatchDetails
:
想法1
Player\u ID
是另一个表用户的唯一主键MatchID
是表匹配项的唯一主键。比赛和球员之间的关系是多对多的
这是复合键吗?在某种意义上,一名球员只能参加一次特定的比赛?MatchID
右侧的列是否对复合键具有函数依赖性,即它们对该复合键是唯一的
想法2
在本例中,Participation\u ID
是表的唯一主键,因为对于不同的玩家和比赛组合,可以有相同的Player\u ID
和相同的MatchID
的多个实例
在这个例子中,我猜这个列是第二个标准形式,因为只有一个主键,匹配值是唯一的,因此在功能上是依赖的?我对函数依赖性有点困惑,尽管我试图阅读它
哦,还有一件小事。。。
我有点怀疑的最后一件事是大量的专栏。MatchID
右侧的所有信息都是关于球员(player_ID
)在比赛中如何表现的详细信息(MatchID
)。他们应该在另一张桌子上吗
如果要查看目前的布局,请链接到其他表:
请忽略MatchID没有下划线,而另一个ID有下划线,这只是一个excel计划列{PlayerID,MatchID}似乎是一个复合键
MatchID右侧的列确实对(复合)主键具有函数依赖性,只要它们表示某个特定比赛中该玩家的统计信息
如果这些列表示玩家的总体统计信息,那么它们只依赖于PlayerID,而这种设计不在2NF中
范式考虑每个候选密钥,而不仅仅是主键。事实上,您后来添加了一个整数行标识符ParticipationID,这并没有改变我前面几段中的任何内容——列{PlayerID,MatchID}似乎仍然是一个(复合)候选键,您必须考虑它们
没有“我没有太多列”这样的标准形式。如果您需要20个在功能上依赖于每个候选键的属性,那么您需要20个在功能上依赖于每个候选键的属性。列{PlayerID,MatchID}似乎是一个复合键
MatchID右侧的列确实对(复合)主键具有函数依赖性,只要它们表示某个特定比赛中该玩家的统计信息
如果这些列表示玩家的总体统计信息,那么它们只依赖于PlayerID,而这种设计不在2NF中
范式考虑每个候选密钥,而不仅仅是主键。事实上,您后来添加了一个整数行标识符ParticipationID,这并没有改变我前面几段中的任何内容——列{PlayerID,MatchID}似乎仍然是一个(复合)候选键,您必须考虑它们
没有“我没有太多列”这样的标准形式。如果您需要20个在功能上依赖于每个候选密钥的属性,那么您需要20个在功能上依赖于每个候选密钥的属性。除非同一玩家可以多次参与同一比赛,否则无论您添加另一个密钥(如{参与{u ID})或不参与
添加{Participation_ID}键只有在您有一些引用it1的其他表并且您希望使它们的外键更精简,或者如果您使用需要非复合主键的特别恶意ORM时才有意义
MatchID右侧的列是否对复合键具有函数依赖关系
对
你可以把“函数依赖性”简单地看作是一种表示关系(一组元组)是函数的方式。关系要成为函数(在这个词的数学意义上),它必须总是为相同的“参数”产生相同的“结果”
如果给定键的属性是“参数”,其余属性是“结果”,那么不能从同一个参数产生两个不同的结果,这仅仅是因为键是唯一的,因此键属性值的任何特定组合2不能识别多个元组
所以所有属性在功能上都依赖于键。这对于任何键都是正确的,否则它就不是键了
唯一的问题是一些非关键属性是否也依赖于关键属性的适当的子集。如果是,则违反了2NF.3
在您的情况下,如果任何属性仅依赖于Player_ID(或MatchID),则将违反2NF
我有点怀疑的最后一件事是列的数量太多。MatchID右边的所有信息都是关于球员(球员ID)在比赛中表现的详细信息。他们应该在另一个表中吗
从逻辑的角度看,它们似乎在需要的地方。不太可能,但也有可能,您对这些数据有一些物理原因。4
一些无关的建议:
- 使用一致的命名:如果有玩家ID,应该有匹配ID,而不是M