【问题标题】:Displaying name from ID of lookup tables - design Q从查找表的 ID 显示名称 - 设计 Q
【发布时间】:2011-02-14 20:15:53
【问题描述】:

我确信这是一个基本问题,但我是 SQL 新手,所以无论如何,对于我的用户个人资料,如果用户住在好莱坞,我想显示以下内容:location = "Hollywood, CA - USA"。所以我假设在用户表中会有 1 列,如 current_city,其 ID 为 1232,这是城市表的 FK,其中 PK 的 city_name = 好莱坞。然后连接 state 表和 country 表以查找名称 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 表,所以一旦我知道如何做到最好,我将对所有表应用相同的原则。我的要求是可扩展性和性能,所以最适合这些的就是我想要的。

【问题讨论】:

    标签: mysql database-design


    【解决方案1】:

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

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

    如前所述,您的第一个建议将是常见的并且通常是最好的方法。如果表键设计得当,那么所有的选择语句都可以有效地使用它们,这也将提供最佳性能。

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

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

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2019-06-14
      • 1970-01-01
      • 2014-12-17
      • 2021-04-06
      • 1970-01-01
      • 2020-02-17
      • 2012-08-03
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多