我有一个分类网站。 我正在使用 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/