从查找表的ID中显示名称 - 设计Q.

时间:2011-02-14 20:15:53

标签: mysql database-design

我确信这是一个基本问题,但我是SQL新手,所以无论如何,对于我的用户个人资料,我想显示这个:location =“Hollywood,CA - USA”如果用户住在好莱坞。所以我假设在用户表中会有一列像current_city,它将ID为1232,这是城市表的FK,其中city_name为此PK =好莱坞。然后连接状态表和国家/地区表以查找名称CA和USA,因为城市查找表将仅存储ID(如CA = 21和USA = 345)

这是设计表格的最佳方式吗?或者我在想是否应该向user_table添加2列如city_id和city_name。并将country_id,country_name,state_id,state_name添加到city表中。这样我就可以节省去其他父表的行程,只是为了获取ID的名称。

这只是一个示例用例,但我有很多查找ID表,所以一旦我知道如何做到最好,我将对所有表应用相同的原则。我的要求是可扩展性和性能,所以无论什么最适合这些都是我想要的。

1 个答案:

答案 0 :(得分:1)

您描述的第一种方式几乎总是更好。

在users表中同时包含city_id和city_name(或任何一对)不是最佳做法,因为它可能会导致数据差异 - 错误的更新可能会导致city_id与city_name不匹配,然后系统行为变得意外。

如上所述,您的第一个建议是通常的,通常是最好的方法。如果表键设计正确,所以所有select语句都可以有效地使用它们,这也可以提供最佳性能。

例如,在users表中只使用city_name可以更快地找到并显示一个用户的城市,但是当尝试运行其他查询时 - 比如查找城市X中的所有用户,这会产生很多不太有意义。

你可以在这里为初学者找到一系列关于数据库规范化的好文章: http://databases.about.com/od/specificproducts/a/2nf.htm。本文有一个非常类似于您想要实现的示例,相关文章可能会帮助您在数据库中设计许多其他表。

祝你好运!