为了理解什么是第二范式,我阅读了一些文章,有些东西我不明白。
在客户表中的文章
中,它说它不在 2NF 中,因为.这里的主键我认为它的意思是 {customerId,EmployeeId}there are several attributes which don’t completely rely on the entire Customer table primary key
如果我们选择 {customerId,employeeId} 作为候选键,那么 Customername,customerCity,PostalCode 确实仅部分取决于候选键,因此不依赖于 2NF。但是,如果我们将候选键单独视为 customerId,那么 Customer 表中的所有列都完全依赖于 customerId 对吗?(因为 employeeId 依赖于 customerId )。
同样,由于CustomerId单独可以是候选键,我们可以将 {CustomerId,EmployeeId} 作为候选键,因为候选键不能包含另一个候选键作为其一部分。
因此,如果我们仅将 customerId 作为候选键,该表不是 2NF 形式吗?
但是在文章中它说 2NF 形式的表应该服务于一个目的,这里这个客户表有两个目的。
To indicate which customers are called upon by each employee
To identify customers and their locations.
然后我感觉这张表不在2NF。
那么这个表中的候选键是什么?
我的第二个问题在这篇文章中
这些表在 3NF 中。在表 TABLE_BOOK 中,候选键是 bookId 对吗?我们不能选择 {bookId,genereId} 作为候选键,对吗?如果选择它就不会在 2NF 中,因为价格不依赖于genreId。
有人可以帮我更好地理解标准化背后的这个理论吗