Php 我该不该头痛?

Php 我该不该头痛?,php,sql,mysql,database,normalization,Php,Sql,Mysql,Database,Normalization,我有一个分类广告网站。 我使用SOLR来索引和存储数据。然后我还有一个MySQL数据库,里面有更多关于分类的信息,我没有存储或索引这些信息 现在,我有一个非常规范化的数据库,有4个表 每当在网站上搜索广告时,SOLR都会进行搜索,并返回一个ID_编号数组,然后用于查询mysql。 因此solr返回id:s,然后使用id:s从mysql数据库获取所有具有这些id:s的广告 现在,我的表之间的所有连接和关系都让我头疼 拥有一个标准化的db,除了维护方便外,我还能得到什么 我可以将所有信息存储到一个包

我有一个分类广告网站。 我使用SOLR来索引和存储数据。然后我还有一个MySQL数据库,里面有更多关于分类的信息,我没有存储或索引这些信息

现在,我有一个非常规范化的数据库,有4个表

每当在网站上搜索广告时,SOLR都会进行搜索,并返回一个ID_编号数组,然后用于查询mysql。 因此solr返回id:s,然后使用id:s从mysql数据库获取所有具有这些id:s的广告

现在,我的表之间的所有连接和关系都让我头疼

拥有一个标准化的db,除了维护方便外,我还能得到什么

我可以将所有信息存储到一个包含50列的表中

因此,与查找一个广告并显示它不同:

SELECT 
  category_option.option_name,
  option_values.value 
FROM classified, category_option, option_values 
WHERE classified.classified_id=?id 
AND classified.cat_id=category_options.cat_id 
AND option_values.option_id=category_options.option_id
我可以用这个:

SELECT * FROM table_name WHERE classified_id = $classified_id
最后一个不是更快吗? 或者,规范化的db是否会更快


谢谢

无论何时进行反规范化,通常都会获得读取速度而失去写入速度,因为您必须多次写入相同的值。此外,应特别注意保持数据完整性

  • 查询将执行多少次
  • 这是高流量应用程序吗
  • 你能添加缓存吗

无论何时进行反规范化,通常都会获得读取速度而失去写入速度,因为必须多次写入相同的值。此外,应特别注意保持数据完整性

  • 查询将执行多少次
  • 这是高流量应用程序吗
  • 你能添加缓存吗

    • 我建议在您的情况下不要去规范化。随着连接的使用越来越多,您会变得更好,并且它们在您的头脑中开始变得更清晰,维护的方便性对未来是一个很好的好处


      这是关于规范化(和非规范化)的一个很好的链接这是一个关于非规范化的问题。一个答案建议使用连接创建一个视图,以获取所需的数据,并像您的
      SELECT*fromtable\u name WHERE classified\u id=$classified\u id
      查询一样使用该视图。一个标准化的DB可能会慢一些,但是你不太可能因为这个原因想要去标准化。我希望这能提供一些帮助。

      我建议在您的情况下不要去规范化。随着连接的使用越来越多,您会变得更好,并且它们在您的头脑中开始变得更清晰,维护的方便性对未来是一个很好的好处


      这是关于规范化(和非规范化)的一个很好的链接这是一个关于非规范化的问题。一个答案建议使用连接创建一个视图,以获取所需的数据,并像您的
      SELECT*fromtable\u name WHERE classified\u id=$classified\u id
      查询一样使用该视图。一个标准化的DB可能会慢一些,但是你不太可能因为这个原因想要去标准化。我希望这能提供一些帮助。

      就MySQL连接而言,使用连接的查询非常简单。我认为没有必要去规范化

      不过,我建议将其改写为以下内容:

      SELECT 
        category_option.option_name,
        option_values.value 
      FROM classified
      JOIN category_option USING (cat_id)
      JOIN option_values USING (option_id)
      WHERE classified.classified_id = ?
      

      就MySQL连接而言,使用连接的查询是微不足道的。我认为没有必要去规范化

      不过,我建议将其改写为以下内容:

      SELECT 
        category_option.option_name,
        option_values.value 
      FROM classified
      JOIN category_option USING (cat_id)
      JOIN option_values USING (option_id)
      WHERE classified.classified_id = ?
      

      我必须添加缓存是的,但这与规范化有什么关系?因为结果是缓存的,而不是数据库,对吗?它的流量也相当大,你说的查询执行多少次是什么意思?每次用户点击“搜索”时,我猜只有一次。。。抱歉,但是你必须详细解释一下我的意思是建议添加一个缓存来考虑其他性能改进的选择。我必须添加一个缓存是的,但是这与标准化有什么关系呢?因为结果是缓存的,而不是数据库,对吗?它的流量也相当大,你说的查询执行多少次是什么意思?每次用户点击“搜索”时,我猜只有一次。。。抱歉,但你必须详细解释一下我的意思是建议添加缓存是考虑其他性能改进方案。