这个表是 3NF 吗?

1 normalization

我有一个person带有属性的表:

id
name
city
state
country
Run Code Online (Sandbox Code Playgroud)

id是主键。这个表是 3NF 吗?如果 1000 人住在同一个城市,那么为州、城市和国家存储相同的数据似乎是多余的。

孔夫子*_*孔夫子 6

不它不是。

考虑这个数据

id | name | city        | state      | country
----------------------------------------------
 1 | john | Los Angeles | California | USA
 2 | mary | San Antonio | Texas      | USA
 3 | joe  | Los Angeles | California | USA
Run Code Online (Sandbox Code Playgroud)

很明显 (city,state,country) 是另一个表的候选键。然后,您会很快意识到这些城市属于相同的(州、国家)组合。最终,你最终得到

Person
------
id
name
city_id

City
--------
city_id
name
state_id

State
--------
state_id
name
country_id

Country
----------
country_id
name
Run Code Online (Sandbox Code Playgroud)