php - MySQL 头痛,我应该还是不应该?

标签 php sql mysql database normalization

我有一个分类网站。 我正在使用 SOLR 来索引和存储数据。然后我还有一个 MySQL 数据库,其中包含一些关于我不存储或索引的分类的更多信息。

现在,我有一个非常规范化的数据库,其中包含 4 个表。

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

现在,我的表之间的所有 JOIN 和关系让我很头疼。

除了易于维护之外,拥有规范化数据库还能得到什么?

我能告诉你吗,将所有信息存储到一个包含大约 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

最后一个不是更快吗? 还是规范化的数据库执行得更快?

谢谢

最佳答案

我建议不要在您的情况下进行非规范化。随着您更多地使用连接,您会更好地使用连接,并且它们开始在您的脑海中变得更加清晰,并且易于维护对 future 来说是一个很好的好处。

Here是关于规范化(和非规范化)的一个很好的链接。 Here这是一个关于非规范化的问题。一个答案建议使用连接创建一个 View 以获取您需要的数据,并像您的 SELECT * FROM table_name WHERE classified_id = $classified_id 查询一样使用它。规范化的数据库可能会更慢,但您不太可能因此而想要反规范化。我希望这能提供一些帮助。

关于php - MySQL 头痛,我应该还是不应该?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2209502/

相关文章:

php - mysql pdo 命中计数器

mysql - 从给定编号所属的表中选择所有记录

mysql - 查找用户最低单圈时间的排名

php - 如何在子类别页面中显示 Wordpress 类别?

MySql 在更新语句中使用用户定义的变量

mysql - 是否可以在内部连接期间重命名连接列?

mysql - 组查询不计算对应值

php - 更改参数值的 PHP 函数的名称是什么?

php - 为什么我的 PHP Blowfish 加密会产生如此奇怪的结果?

php - AWS SES 能否将退回/投诉对象发送到 http 端点?