【发布时间】:2020-06-16 22:13:37
【问题描述】:
我必须将我的数据库标准化为 BCNF,但我对 1NF 有点困惑。
我的主桌是关于视频游戏的,它看起来像这样:
game_id(PK, AI) title developer_id(FK) publisher_id(FK) genre modes release_date
1 XYZ 3 5 FPS, Battle Royale Single-player, multiplayer 2019-02-04
我对“modes”和“genre”列感到困惑,因为有时我有多个值,所以它不是原子的,对吧?这条评论说的是同样的Explain Like I am Five -> How a Primary Key Satisfies First Normal Form,但他下面的评论说的是相反的......
我已经阅读了关于规范化的内容,并在 1NF 中找到了一个表的 this example。回顾我的桌子,我意识到我不能做同样的事情,因为我有一个 'id' 这是一个 PK 所以它不能有重复的值。其他消息来源说,一旦有了 PK,就意味着该表处于 1NF,因为所有行都不同。
我正在考虑创建另外两个表,其中仅存储“模式”(单人游戏/多人游戏/单人游戏、多人游戏)和“流派”。但是,如果游戏只有一个“id”也是 PK,我将如何将“mode_id”作为 FK 插入“游戏”表中?
那我猜它也满足NF2?对于 NF3,我应该再创建两个表来存储游戏模式和游戏类型之间的 n-m 关系...
如果有人想查看我的整个数据库(它又小又简单)并告诉我应该在哪里应用规范化,我会很高兴。谢谢!
【问题讨论】:
-
请use text, not images/links, for text--including tables & ERDs。转述或引用其他文本。只提供您需要的东西并将其与您的问题联系起来。仅将图像用于无法表达为文本或增强文本的内容。使用编辑功能插入图像/链接。使您的帖子自成一体。 SO/SE cmets 可以随时删除。 "1NF" has no single meaning. 也不是“关系”。因此,您需要告诉我们您的定义,最好还告诉我们教科书名称和版本。
-
您的第一个问题是什么? PS 现在你只是要求我们用定制的教程重写你的教科书。请参阅How to Ask,点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。按照教科书的理由展示您的工作步骤,并在您遇到困难的第一个地方提出 1 个经过研究的特定非重复问题。引用您依赖的定义和算法。此外,所有步骤都是常见问题解答;但是有很多糟糕和困惑的答案。你必须知道你的“1NF”——在你的链接评论中查看我的帖子! PS“review my design”不是一个有效的 SO 问题。
标签: mysql database database-normalization