0

我有一个数据库,其中有一个网站地址列表,每个地址都有一个类别。我拥有的表字段中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 创建一个目录,并且想知道,在想要查询的那一刻,什么更好。谢谢!

4

3 回答 3

0

看起来您正在尝试以良好的规范化数据库设计为代价来预先优化您的网站。我的建议:设置两个不同的表。一个用于类别。另一个用于网站。然后通过类别 ID 将两者联系起来。这样,如果您需要更新类别的名称,您就不必更新网站表中的多行。

于 2012-08-28T16:10:19.280 回答
0

你的第二种方法更健壮。如果您想更改类别的名称,您只需要更改一次。

此外,在您希望在网站上拥有多个类别的情况下,它为您提供了更大的灵活性。

于 2012-08-28T16:10:53.360 回答
0

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

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


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

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

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

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

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

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


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

如果是这样,那么您需要考虑一个关系表,该表将网站和类别相关联。例如:

 website_category (website_id, category_id) 

在您的数据库设计中适当地表示实体之间的“实体”和“关系”至关重要。在进行调整以优化性能之前,请确保您首先做到了这一点。

于 2012-08-28T16:13:40.620 回答