这个数据库关系是 3NF 和 BCNF 中的吗?为什么?
员工(SID、Fname、MI、Lname、职位、班次、电话号码、DoB、DoE、性别、公寓号码、城市、邮政编码)
SID 是主键。
FD1:(SID)-->(Fname、MI、Lname、职位、班次、电话号码、DoB、DoE、性别、公寓号码、城市、邮政编码);
FD2:(Fname、MI、Lname、DoB)-->(SID、职位、班次、电话号码、DoE、性别、公寓号、城市、邮政编码)
FD3:(邮政编码)-->(城市)
由于在 FD3 中,Zip_code 不是主键,并且城市可以有多个 Zip_code,因此它不在 3NF 中,必须进行分解。创建另一个表 Zip_Locations (Zip_code(主键), City)。 Zip_Locations 只有一个 FD,并且它是依赖于候选键或主键的非主键,因此它自动满足 3NF。 Staff 获取 Staff (SID、Fname、MI、Lname、Position、Shift、Phone_number、DoB、DoE、Gender、Apt_Number、Zip_code),之后关系采用 BCNF,因为所有非素数键都严格依赖于候选键。另外,如果关系中只有一个主键并且它已经满足 3NF,那么它会自动满足 BCNF。