在归一化中,如何判断这是第一,第二或第三范式(1nf,2nf,3nf)



这是一个来自class的例子,在大多数情况下,我可以将它们转换为1NF, 2NF和3NF。我不明白的是这个问题问的是,这是从什么形式开始的。老师没有解释,据我所知,最初的速记符号根本没有任何规范化的形式。我正在检查的速记符号是粗体。我遇到的问题也是黑体部分。

Staff(employeeID,employeeName, salesOffice, officePhone, (customerID,姓名,地址,城市,州,zip))

函数依赖

employeeId → employeeName, salesOffice, officePhone
salesOffice → officePhone
customerID → name, address, city, state, zip
zip → state, city

当前的正常形式是什么?如果不在3NF中,则显示1NF, 2NF和3NF

1 nf

Staff(employeeID,employeeName, salesOffice, officePhone, customerID, name, address, city, state, zip)

2 nf

Staff(employeeID,employeeName, salesOffice, officePhone) 
customer(customerID, name, address, city, state, zip) 
saleCust(employeeID, customerID)

3 nf

Staff(employeeID,employeeName, salesOffice, officePhone) 
customer(customerID, name, address,zip) 
saleCust(employeeID, customerID) 
zip(city, state,
zip)

我说提供的初始速记形式(粗体显示的那个)根本不是规范化的形式,对吗?

是的,这样说完全正确。你不用直接说出来。你也有事实要证明。

你可以写:

As 1NF状态:

表必须包含所有原子值

Staff(employeeID,employeeName, salesOffice, officePhone, (customerID, name, address, city, state, zip))

在上面的Staff表中,客户信息不是原子的,所以它不在1NF中。

1NF解:

Staff(employeeID,employeeName, salesOffice, officePhone, customerID, name, address, city, state, zip)

然后是2NF,它表示:

表中不应该有任何部分依赖,或者每个非键属性必须完全依赖于键属性值。

Staff(employeeID,employeeName, salesOffice, officePhone, customerID, name, address, city, state, zip)

在上述关系中,employeeNamesalesOfficeofficePhone依赖于employeeID,而addresscitystatezip依赖于CustomerID

2NF解:

Staff(employeeID,employeeName, salesOffice, officePhone) 
customer(customerID, name, address, city, state, zip) 
saleCust(employeeID, customerID)

最后,3NF表示:

你的表中不应该有任何传递依赖

Staff(employeeID,employeeName, salesOffice, officePhone) 
customer(customerID, name, address, city, state, zip) 
saleCust(employeeID, customerID)
从以上关系来看,statecity取决于zip,而zip又取决于customerID

3NF解:

Staff(employeeID,employeeName, salesOffice, officePhone) 
customer(customerID, name, address,zip) 
saleCust(employeeID, customerID) 
zip(city, state,
zip)

通过这种方式,你不仅会说,而且还会证明这个问题甚至不在1NF中。

相关内容

  • 没有找到相关文章

最新更新