Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 目录中类似标记的类别的表设计_Mysql_Database Design - Fatal编程技术网

Mysql 目录中类似标记的类别的表设计

Mysql 目录中类似标记的类别的表设计,mysql,database-design,Mysql,Database Design,我注意到,大多数类似目录的站点都有由站点管理员创建和管理的类别,而用户则选择要发布到的类别。对于这种实现,总是有2个表;类别表和列表表,其中列表表将由包含类别ID的列组成 如果只有几个类别,并且您知道手边的类别,那么这种设计很简单 但是,如果您有很多类别(即2000多个类别),或者您允许用户指定自己的类别(即标记),该怎么办 如果我们在listings表中创建一个category列,它将包含重复的类别。同样,如果我们创建一个单独的categories表,它也将包含duplicate,因为类别是由

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

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

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

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

在为这种场景设计数据库时,最佳实践是什么


提前谢谢。

类别的数量并没有改变任何东西,但是从10个类别中选择1个类别的UI看起来与2000个类别的UI大不相同

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

然而,数据库无法执行的是一个独特的“含义”。 用户可以独立创建以下类别:

  • Java编程
  • Java程序设计
  • 编程,java
  • 关于Java的一切
。。。它们的意思可能都是一样的。最后一个类别可能也是与咖啡制作相关的类别,但我不敢打赌:)


Stackoverflow必须处理这个问题,我想你可以找到关于如何搜索的信息,为什么不看看wordpress的方法呢?WordPress.com非常庞大,它有2000多个标签或类别。你可以在www.WordPress.org上下载最新的WordPress。数据库模式位于普通SQL中的wp admin\includes\schema.php文件中