您好我正在设计我的mysql dbase以提高效率..
目前我有3张桌子
国家: 国家/地区ID,国家/地区名称
表状态: 州身份证,州名,国家身份证
表城: 城市ID,城市名称,州ID
我在想是否更好......
国家/地区名称,而不是表状态中的国家/地区ID
状态名称而不是表格城市中的州ID
这是因为我的代码中的每个地方都需要运行额外的查询来将国家ID,州ID和城市ID从数字转换为字母(例如1到美国)...按字母顺序引用不是更好..(少查询)
答案 0 :(得分:1)
整个世界大致
260 country/regions
5000 states
many many cities
根据您的需要,设计会有所不同。
1 - 出于微小存储的目的:
country(id,country)
state(id,state,country_id)
city(id,city,state_id)
2 - 出于快速查询的目的:
city(id,city,state,country)
3 - 为了中间道路的目的:
country(code,country)
state(code,country) -- you might merge country and state into one table based on code
city(state_code,city)
您可能有兴趣查看iso代码:
https://en.wikipedia.org/wiki/ISO_3166-1例如美国
https://en.wikipedia.org/wiki/ISO_3166-2例如US-NY
因此,iso状态代码包含iso国家代码。
根据您的更多信息更新:
如果您正在为美国设计房产网站。
1 - 您不需要国家/地区表,很可能所有属性都在美国境内
2 - 美国境内不到60个州,因此您可以使用枚举来保存国家。因为几乎所有人都会理解NY =纽约,因此您不需要州表。
3 - 所以你需要一张城市桌。正如您将使用city_id获取超过10,000,000条财产记录。
usa_cities(
id int PK
state enum('NY', 'LA', ...)
city varchar
...
)
properties(
id int PK
city_id int,
....
)
AS属性表通常非常大,您可以跳过状态表,并对设计进行反规范化以加快查询以减少连接:
properties (
id int PK,
state enum('NY', 'LA',...)
city varchar
...
)
你也许可以将enum用于城市,我不确定美国有多少城市,但我没想到这一点。
答案 1 :(得分:0)