我有一个person
带有属性的表:
id
name
city
state
country
Run Code Online (Sandbox Code Playgroud)
id
是主键。这个表是 3NF 吗?如果 1000 人住在同一个城市,那么为州、城市和国家存储相同的数据似乎是多余的。
不它不是。
考虑这个数据
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)