表设计目录中类似标签的类别

时间:2011-04-18 02:57:04

标签: mysql database-design

我注意到大多数类似目录的网站都有网站管理员创建和管理的类别,而用户则选择/选择要发布的类别。对于这样的实现,总会有2个表;一个类别表和一个列表表,其中列表表将包含一个包含类别ID的列。

如果只有几个类别并且您知道手头的类别,那么这种设计很简单。

但是,如果您有很多类别(即2000多个类别)或者您允许用户指定自己的类别(即标签),该怎么办?

如果我们在列表表格中创建一个类别列,它将包含重复的类别。同样,如果我们创建一个单独的类别表,它也将包含重复,因为用户指定了类别。

在为这种情况设计数据库时,最佳做法是什么?

提前谢谢。

2 个答案:

答案 0 :(得分:1)

类别的数量并没有真正改变任何东西,但是用于选择10个类别中的1个的UI与具有2,000个类别的UI看起来非常不同。

通过向数据库表添加适当的约束来防止重复。当用户自己添加标签时,这不会改变。列表与类别具有一对一或一对多的关系。前者最好作为类别表的列表中的外键实现。后者最好作为带有两个外键的附加表来实现;一个用于分类,一个用于列表。使主键成为由列表键和类别键组成的复合键。

但是,数据库不能强制实施的是一种独特的“含义”。 用户可以独立创建以下类别:

  • Java编程
  • Java Porgramming
  • 编程,java
  • 所有关于Java

......他们可能都意味着同样的事情。最后一类也可能是与咖啡制作相关的类别,但我不打赌它:)

Stackoverflow必须处理这个问题,我怀疑你可以找到有关如何搜索的信息Meta stackoverflow

答案 1 :(得分:0)

为什么不看看wordpress方法呢? WordPress.com非常庞大,它有超过2000个标签或类别。您可以在www.wordpress.org下载最新的WordPress。数据库模式位于纯SQL中的wp-admin \ includes \ schema.php文件中。