按类别名称查找或制作额外的表格

时间:2012-08-28 16:02:42

标签: php mysql

我有一个数据库,我有一个网站地址列表,每个地址都有一个类别。 我有site_id, site_url and site_category表格字段。在site_category我用简单的英语分类,比如:电影,教程等......

我想知道速度有什么好处。要有这样或有两个表:

网站:site_id, site_url and site_category

分类:category_id, category_name

site_category的“网站”表格中只放category_id

我正在使用PHP创建一个目录,并想知道,在想要查询的时刻,什么是更好的。谢谢!

3 个答案:

答案 0 :(得分:0)

您似乎正在尝试以优质normalized数据库设计为代价来预先优化您的网站。我的建议:设置两个不同的表。一个类别。另一个用于网站。然后通过类别ID链接两者。这样,如果您需要更新类别的名称,您就不必更新网站表格中的多个行。

答案 1 :(得分:0)

您的第二种方法更强大。如果您想更改类别的名称,则只需更改一次。

此外,如果您希望在网站上拥有多个类别,它会为您提供更大的灵活性。

答案 2 :(得分:0)

与几乎所有SQL一样,它实际上取决于一大堆因素。

通常,针对单个表的查询可能比针对两个表的查询执行得更好。


“category_name”的值相对较短(比如8个字符或更少),并且使用适当的索引category_name作为前导列,您将获得以下查询的良好性能:

SELECT * FROM websites WHERE category_name = 'movies' ORDER BY category

为获得最佳性能,请考虑category_name的ENUM列。但这意味着category_name的值将作为列定义的一部分“固定”。

如果您需要获取不同category_name值的列表(例如,对于下拉列表框),则首选单独的表(例如示例中的Categories表)。

最大的问题是“类别”是否是系统中的实体。也就是说,一个“类别”是一个人,地点,事物,概念或事件,它对业务很重要,可以唯一识别,并且您需要存储信息。

如果是这样,它就是一个“实体”,你想为它创建一个单独的表。


您需要考虑的一个更大的问题是网站和类别之间的关系。一个网站可以有多个类别吗?

如果是这样,那么你需要考虑一个关系表,它与网站和类别有关。例如:

 website_category (website_id, category_id) 

实体之间的“实体”和“关系”在数据库设计中得到恰当的表示至关重要。在调整以优化性能之前,请确保先做到正确。