2016-04-23 81 views
0

我目前正在做一些课程,我得到了一个建议表,我必须确定哪个规范形式的规则会被破坏。我认为我已经完成了这些工作,但是在应用某些规则时我一直很困惑。所以,如果有人能够检查它并向我解释为什么如果有什么事情是错误的,我将不胜感激。数据库规范化(1NF到3NF)

实施例:

UNF

这将打破1NF为有重复的数据,因为每个摄影师可参加多个匹配(匹配ID),因此,解决这个和带来1NF我这样做:

1NF and 2NF

由于没有组合键,它已经在2NF的两个表中,但是公司和公司编号之间存在传递依赖关系。因此,这样做是为了带给3NF:

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, 

回答

1

在你的第二张图片中,你跳过了重复组的传统1NF处理(将分组数据复制到每个Matches ID的单独行)并直接转到2NF。那里没问题。你的3NF也是正确的。

移动否和照片名称是否也是传递性依赖?

编号摄影师的姓名和手机号码是摄影师ID的属性(功能依赖性)。

我不确定如果我将公司和公司编号重新分配到1NF时是否重复。

识别重复项不是将表转换为1NF的一部分。

0

据我所学到直到日期。表中必须没有任何函数依赖关系才能通过3NF测试。

如果表中有任何可以在主键位置工作的列,那么它肯定不在那里。

现在看看规范化后的表 - 手机号码肯定是一个唯一的ID。

+0

所以你建议它应该是这样的http://i.stack.imgur.com/uhi9q.png? - 抱歉不知道如何在评论中显示它。 –

+0

电话号码不是标识符,因为人们共享电话,甚至是手机。 – jimueller

+0

取决于用例说实话。我从未部署过允许用户重复输入手机号码的系统。我只是在谈论手机号码。 –

1

我认为你的问题是,据我所知,你并没有一个人的标识符。你最近的地方是名字。这可能会给你带来问题,但我认为在这种情况下它通过了3NF的定义。

最大的问题是你可能想要识别两个不同的人,名叫'约翰·詹姆斯',所以实际的问题是你需要某种其他信息来做到这一点(例如,社会安全号码,员工ID等)。此时,名称需要被分解并与一个人的标识符一起存储(因为依赖人员编号是id的函数,但名称是人员编号的函数)。

+0

对不起 - 混乱 - PhotoID是摄影师的ID。我会更新这个问题,以便更清楚。 –

+0

在这种情况下,它听起来像是3NF,因为名称始终是摄影师ID的依赖关系。 –