这是一个来自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)
在上述关系中,employeeName、salesOffice、officePhone依赖于employeeID,而address、city、state、zip依赖于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)
从以上关系来看,state和city取决于zip,而zip又取决于customerID。
3NF解:
Staff(employeeID,employeeName, salesOffice, officePhone)
customer(customerID, name, address,zip)
saleCust(employeeID, customerID)
zip(city, state,
zip)
通过这种方式,你不仅会说,而且还会证明这个问题甚至不在1NF中。