规范化步骤2和3

时间:2015-05-19 20:52:59

标签: normalization database-normalization

给定关系public static void sortAndRemoveDups(List<Integer>listToFix) { Set<Integer> listToFix1 = new HashSet<>(listToFix); for(Integer i : listToFix1){ listToFix.removeAll(i); listToFix.add(i); } System.out.println(listToFix); }

为了获得第一范式,复合属性Location已被分解为City和Country。

鉴于公司可以拥有多个地点,您对下一个分解步骤的建议是什么,并最终确定分解以达到第三范式。

我的尝试

下一步分解步骤

公司(CompanyRefNumber,名称,周转,年) 公司(CompanyRefNumber,城市,国家)

第三范式

公司(CompanyRefNumber,名称,周转,年)

公司(CompanyRefNumber,城市)

公司(CompanyRefNumber,国家或地区)

1 个答案:

答案 0 :(得分:0)

这是一个例子

    ah oh
      |
      v  
--------------------------------------          
1, Google, Mountain View, US, 1B, 2014
1, Google, Seattle, US, 10M, 2014
1, Google, London, UK, 50M, 2013
2, Bloomberg, New York, US, 100M, 2014
2, Bloomberg, New York, US, 90M, 2013

主键(CompanyRefNumber, City, Country, Year)可唯一标识每条记录。

但是,我们发现公司Name仅依赖于CompanyRefNumber不符合第二范式的非主要密钥不能依赖于主键的任何子集

为了规范化,我们可以创建一个新关系CompanyInfo,如下所示:

--------------------------------------
1, Google
2, Bloomberg

此时,非主要属性仅为turnover,显然没有其他非主要属性来确定turnover的值,因此符合第3范式非主键本质上不能依赖任何其他非主键