我有一个数据库,我有一个网站地址列表,每个地址都有一个类别。
我有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创建一个目录,并想知道,在想要查询的时刻,什么是更好的。谢谢!
答案 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)
实体之间的“实体”和“关系”在数据库设计中得到恰当的表示至关重要。在调整以优化性能之前,请确保先做到正确。