我目前正在做一些课程,我已经获得了一个建议的表格,我必须确定它会破坏哪些正常的形式规则。我认为我已经做了,但是我在应用某些规则时感到困惑。所以,如果有人能检查并向我解释为什么出现问题,我将不胜感激。
示例:
这会打破1NF,因为每个摄影师都可以参加多场比赛(比赛ID),因为有重复的数据,因此要解决这个问题并带到1NF我这样做:
由于没有复合密钥,因此两个表已经在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,
答案 0 :(得分:1)
我认为,你的问题是,就我所知,你并没有真正拥有一个人的标识符。你最接近的是名字。这可能会给你带来问题,但我认为,在这种情况下它通过了3NF的定义。
最大的问题是你可能想要找出两个名叫John James&#39;所以实际问题是你需要某种其他信息来做到这一点(例如,社会安全号码,员工ID等)。此时,名称需要被中断并与人的标识符一起存储(因为那时依赖人数是id的函数,但name是人数的函数)。
答案 1 :(得分:1)
在第二张图片中,您跳过了对重复组的传统1NF处理(将分组数据复制到每个Matches ID
的单独行中)并直接进入2NF。没问题。你的3NF也是正确的。
Mobile No和Photo Name是否也是传递依赖?
没有。摄影师的姓名和手机号码是摄影师身份证的属性(功能依赖性)。
我不确定在将公司和公司号码带到1NF时是否会将公司号码和公司号码分类为重复。
识别重复项并不是将表转换为1NF的一部分。
答案 2 :(得分:0)
据我所知,到目前为止。表中不得有任何功能依赖,以使其通过3NF测试。
如果表中有任何列可以在主键位置工作,则它不能存在。
现在看一下规范化后的表格 - 手机号码肯定是一个唯一的ID。