【问题标题】:MYSQL storing id or descriptive text for performanceMYSQL 存储 id 或描述性文本以提高性能
【发布时间】:2012-03-09 02:04:34
【问题描述】:

请原谅我缺乏知识。我正在创建一个 php/mysql 网站,该网站将存储各种汽车的广告记录。每个广告记录将包含汽车型号和汽车制造数据以及描述、价格等...

在我的创建广告表单中,我有 2 个选择字段用于从表中查找汽车品牌和型号,其中包含所有品牌的 ID 和汽车品牌,以及所有型号的 ID、汽车品牌和汽车型号。

我的问题是,当我在广告创建表单上选择数据时,最好获取 id 和汽车制造商,然后将“id”存储在我的广告表中,还是应该存储实际的“汽车制造商” ”和“汽车型号”在我的数据库中的广告表中?

我假设只有 id 用于搜索目的会更快,然后当我查找要显示的数据时,我需要获取 id 并在汽车制造商和型号表上进行连接以获取汽车制造商和型号要显示的说明。

这对性能会更好吗?还是将汽车品牌和型号存储在每个广告记录中没有什么区别,所以我不需要进行连接以稍后显示它们?

【问题讨论】:

    标签: php mysql normalization


    【解决方案1】:

    想想人们将如何使用该网站。用户可能会通过品牌或型号进行搜索。因此,信息标准化很重要。在创建列表时让人们输入“Chevy”而其他人输入“Chevrolet”会导致各种问题。最好有一个包含该信息的Makes 表,并在您的广告表中有一个外部 make_id 字段。

    【讨论】:

      【解决方案2】:

      存储 ID。抛开性能不谈,这可以让您对数据进行适当的规范化。

      考虑制造商将名称从“Datsun”更改为“Nissan”的情况。通过存储 ID,您只需在查找表中的一个位置进行更改。如果您存储了名称,则必须更新每个包含“Datsun”的广告行。

      【讨论】:

        【解决方案3】:

        您所说的是数据库模式(反)规范化。我强烈建议在获取数据时存储 ID 并执行 JOIN。然后某个时候,在你有很多很多流量之后,你可以开始考虑非规范化你的模式(即包括“内联”的东西......出于性能原因)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-26
          • 2016-10-07
          • 2012-04-11
          • 2022-06-16
          • 2012-02-27
          相关资源
          最近更新 更多