好的,所以我有 2 张桌子。第一个表的名称owner
是
owner_id primary key
first_name
last_name
我还有另一张car
桌子
car_reg_no primary key
car_type
car_make
car_model
car_origin
owner_id foreign key
这个设计是 2NF 还是 3NF 或者两者都不是?
好的,所以我有 2 张桌子。第一个表的名称owner
是
owner_id primary key
first_name
last_name
我还有另一张car
桌子
car_reg_no primary key
car_type
car_make
car_model
car_origin
owner_id foreign key
这个设计是 2NF 还是 3NF 或者两者都不是?
AFAIK,2NF,由于car
表字段的相互依赖。您将需要第三张表,car_type
其中列出了制造商、型号和原产地,以及表car_type_id
中的外来物car
。
3NF 意味着它在 2NF 中,并且没有传递函数依赖。用一种更容易理解的术语来说:“所有属性都依赖于密钥,整个密钥,只有密钥”。
第一个表满足了所有这些,所以它在 3NF 中。
第二张表需要分析一下:非键是否存在函数依赖?具体来说,可以有属于不同品牌的相同车型吗?
car_model
->car_make
不存在,并且该表在 3NF 中(除非其他一些依赖违反 3NF - 请参阅car_origin
下面的评论)。car_model
->car_make
违反了 3NF。还有,是什么意思car_origin
?如果它在功能上依赖于非密钥,这也可能违反 3NF。