数据库规范化(1NF 到 3NF)
Database normalisation (1NF to 3NF)
我目前正在做一些课程作业,我得到了一个建议 table,我必须确定它会破坏哪些范式规则。我想我已经做到了,但是我一直对何时应用某些规则感到困惑。因此,如果有人可以检查它并向我解释为什么出现问题,我将不胜感激。
示例:
这会破坏 1NF,因为存在重复数据,因为每个摄影师可能会参加多场比赛(比赛 ID),因此为了解决这个问题并引入 1NF,我这样做:
由于没有复合键,因此对于 table 来说它已经在 2NF 中,但是公司和公司编号之间存在传递依赖关系。因此这样做是为了达到 3NF:
手机号和照片名也是传递依赖吗?如果有人有相同的名字,这是否意味着它不是?此外,我不确定在将其提交给 1NF 时是否会将公司和公司编号归类为重复项。
谢谢。
编辑:请注意,很抱歉造成混淆 - PhotoID 是摄影师 ID。完整列名:
Photographer ID (Primary key) <- Told this is the PK in the question
Photographer Name,
Mobile Phone Number,
Employing Company, <-Told this is unique in the question
Employing Company Phone Number,
Matches Attending,
据我所知,到目前为止。 table 中不能有任何函数依赖才能通过 3NF 测试。
如果 table 中有任何列可以在主键位置工作,那么它一定不在那里。
现在看看标准化后的table——手机号码肯定是一个唯一的id。
我认为,您的问题是,据我所知,您实际上并没有一个人的标识符。最接近的是名字。这可能会给你带来问题,但我认为,在这种情况下,它通过了 3NF 的定义。
最大的问题是您可能希望能够识别名为 'John James' 的两个不同的人,因此实际问题是您需要某种其他信息才能做到这一点(例如,社会安全号码、员工 ID 等)。在这一点上,name 需要被分解并与一个人的标识符一起存储(因为依赖人编号是 id 的函数,而 name 是人编号的函数)。
在你的第二张图片中,你跳过了重复组的传统 1NF 处理(将分组数据复制到每个 Matches ID
的单独行中)并直接进入 2NF。没问题。你的 3NF 也是正确的。
Is Mobile No and Photo Name also a transitive dependency?
没有。摄影师姓名和手机phone号码是摄影师ID的属性(函数依赖)
I'm unsure if I would have classified the Company and Company number as duplicates when taking it to 1NF.
识别重复项不是将 table 转换为 1NF 的一部分。
我目前正在做一些课程作业,我得到了一个建议 table,我必须确定它会破坏哪些范式规则。我想我已经做到了,但是我一直对何时应用某些规则感到困惑。因此,如果有人可以检查它并向我解释为什么出现问题,我将不胜感激。
示例:
这会破坏 1NF,因为存在重复数据,因为每个摄影师可能会参加多场比赛(比赛 ID),因此为了解决这个问题并引入 1NF,我这样做:
由于没有复合键,因此对于 table 来说它已经在 2NF 中,但是公司和公司编号之间存在传递依赖关系。因此这样做是为了达到 3NF:
手机号和照片名也是传递依赖吗?如果有人有相同的名字,这是否意味着它不是?此外,我不确定在将其提交给 1NF 时是否会将公司和公司编号归类为重复项。
谢谢。
编辑:请注意,很抱歉造成混淆 - PhotoID 是摄影师 ID。完整列名:
Photographer ID (Primary key) <- Told this is the PK in the question
Photographer Name,
Mobile Phone Number,
Employing Company, <-Told this is unique in the question
Employing Company Phone Number,
Matches Attending,
据我所知,到目前为止。 table 中不能有任何函数依赖才能通过 3NF 测试。
如果 table 中有任何列可以在主键位置工作,那么它一定不在那里。
现在看看标准化后的table——手机号码肯定是一个唯一的id。
我认为,您的问题是,据我所知,您实际上并没有一个人的标识符。最接近的是名字。这可能会给你带来问题,但我认为,在这种情况下,它通过了 3NF 的定义。
最大的问题是您可能希望能够识别名为 'John James' 的两个不同的人,因此实际问题是您需要某种其他信息才能做到这一点(例如,社会安全号码、员工 ID 等)。在这一点上,name 需要被分解并与一个人的标识符一起存储(因为依赖人编号是 id 的函数,而 name 是人编号的函数)。
在你的第二张图片中,你跳过了重复组的传统 1NF 处理(将分组数据复制到每个 Matches ID
的单独行中)并直接进入 2NF。没问题。你的 3NF 也是正确的。
Is Mobile No and Photo Name also a transitive dependency?
没有。摄影师姓名和手机phone号码是摄影师ID的属性(函数依赖)
I'm unsure if I would have classified the Company and Company number as duplicates when taking it to 1NF.
识别重复项不是将 table 转换为 1NF 的一部分。