如何在数据库中构建“类别”数据?

时间:2011-10-29 19:39:29

标签: mysql database database-design

我有一个我在“类别”中构建的网站,它的工作方式与StackOverflow的标签非常相似。

我对它如何为这种事情最好地构建表格感到困惑。例如,我知道我需要一个表格来构建实际的类别,例如名称,制作者,制作日期等等。

我不确定的是:当记录有多个不同类别时,如何将其存储在数据库中。我应该在类别所属的项目表中有record_ids,并且只用逗号分隔它吗?或者我应该有一个单独的表格,其中包含item_categories和item_id,category_id等等,只需加入该表格和项目表,以及获取类别时的类别表格?

由于加入梯子似乎很慢,但更有条理和干净。

还是有另一种方法来构建我没有想到的吗?如何构建这种数据是一种好方法?

3 个答案:

答案 0 :(得分:4)

你应该像你说的那样使用一个单独的表。它被称为normalization

如果您使用带逗号分隔值的列,请考虑访问值与执行连接时的性能。您必须拆分每个值,然后进行比较以查看是否匹配。

答案 1 :(得分:3)

制作三张桌子。一个用于页面,一个用于类别(连同元信息等),一个用于将它们绑定在一起。最后一个表只需要一个pageid和一个categoryid来连接两个表中的记录。

不要将逗号分隔值存储在数据库中。

答案 2 :(得分:2)

  

或者我应该有一个单独的表格,其中包含item_categories和item_id,category_id等等,只需加入该表格和项目表格,以及获取类别时的类别表格?

是的,这个。这是SQL中经典的M:N关系。