2017-03-21 50 views
0

我对这个3NF(第三范式)有点困惑。我有一个项目,我需要做的,它需要在3NF。我创建了一些描述计算机不同部分的表格。3NF数据库表

例如,我有一个名为CPU的表格和一个名为COMPUTERSYSTEM的表格。 CPU获得了列NAME,PRICE,SOCKETTYPECLOCKSPEEDCOMPUTERSYSTEM表是不同组件的组合,位于CPU表中或其他组件表中,如GPU

所以我的问题是,这是3NF?是表CPU3NF?我知道3NF由于每行都需要依赖于primary key,而我的primary key是所有表中的名称,是不是Price和clockspeed等依赖于名称?

回答

0

要求的表格以3NF:

1. The table should be in 2NF. 
2. There should not be transitive functional dependency between the table. 

假设表中有一个名为student_id数据,ZIP_CODE,市3列。这里的student_id是主键。所以其他两列只能依赖于student_id。但城市也取决于zip_code。因此我们需要将表分成两个不同的表。 Table_1:student_id,Zip_code和Table_2:Zip_code,City。

在你的情况下,在CPU表中,我希望(或一定是)所有其他列如价格,套接字类型和clockspeed只取决于名称(pk)。所以它在3NF。

参考: Normalization in databases

+0

感谢您的帮助:) – StudentCoderJava

0

3NF,或第三范式是指如下归一化的第一3 5的规则的表的组织:

  • 1NF =否重复基团( Phone1,Phone2等)
  • 2NF = 1NF +与PK直接相关的所有非关键属性
  • 3NF = 2NF +与PK直接相关的所有属性(FK到2NF表 包括)

插座 SocketTypeId SocektTypeDescription

CPU CPUID 厂商 SocketTypeId(FK到插座) 时钟速度 价格

COMPUTER ComputerSystemId ComputerSystemName CPUID(FK到CPU) e TC ...

插座2NF,因为它没有重复基团,它的唯一的非键列(SocketTypeDescription)直接关系到它的主键(SocketTypeId)

CPU是3NF,因为它没有重复的组,所有的它的非键列与其主键直接相关,并且其对外部表的引用也与其主键直接相关。

由于相同的原因,COMPUTER也是3NF。