【问题标题】:Database table design数据库表设计
【发布时间】:2011-03-02 17:09:32
【问题描述】:

我有一张房产清单。我需要在这些列表中添加城市。将城市列表拆分到自己的表格中是最佳做法吗?

我希望用户在添加新属性时能够从城市列表中进行选择。

顺便说一下,这是一个 Rails 项目。

【问题讨论】:

    标签: ruby-on-rails database database-design


    【解决方案1】:

    在这种情况下,城市查找表是有意义的。

    如果需要,这还允许您在未来为每个城市添加更多信息。

    【讨论】:

      【解决方案2】:

      如果每个属性只有一个城市,将其放入属性表中并没有什么大问题。如果有更多,没有好的选择,只能使用城市表。

      或者,如果您想从不允许添加的下拉列表中选择城市,则使用城市表可能是个好主意。如果您这样做,那么您可能希望在属性表中存储 cityid 而不是城市名称。这样,当有人更改城市名称时(诚然,这可能不会经常发生),您只需更改一条记录。当然,如果你有一个城市表,你必须有一个外键并确保 city_id 在属性表中被索引以保持你的数据完整性。

      【讨论】:

        【解决方案3】:

        是的。规范化您的数据库架构通常是最佳实践,这样您就不会在您的房产列表中的多个房产列表记录中重复相同的城市名称。

        在某些情况下,出于性能原因,您希望进行非规范化。在证明自己是(即表读取变得非常慢)之前,我不会认为您的情况是其中一种情况。即便如此,您可以在非规范化架构之前进行一些优化。

        【讨论】:

        • 将城市放在自己的表中与规范化无关。不这样做与非规范化无关。这不一定使事情对或错 - 但你应该清楚推理是什么。没有迹象表明 OP 的架构尚未标准化。
        • @dportas 没错,如果我的回答包含规范化和非规范化模式的示例,我的回答会更好地解决这个问题,这表明我认为他在问他应该使用哪一个。