单列表用于分类

时间:2016-03-13 06:50:27

标签: sql database-design

我的自制博客的类别是否可以有一个列表?我真的看不出这张桌子还有什么。

此表与posts表有很多关系。

我的理由是我不想要相同的类别,这样我的类别也会成为主键。

2 个答案:

答案 0 :(得分:1)

我会添加一个代理键,主要有两个原因:

  1. 使用代理键可以使您的联接处理整数而不是字符串,这样更有效率
  2. 使用代理键可以重命名类别,而无需浏览与该类别相关的所有行,也可以更改它们。我知道大多数现代数据库都允许更新级联,但即使你不必手动操作,它也需要在数据库方面做更多的工作。
  3. 当然,您还必须在类别名称上保留唯一索引,并将其标记为非空,否则您最终可能会为同一类别名称提供2个ID,或者类别名称为null的ID。

答案 1 :(得分:0)

逻辑上,如果您想在录制帖子之前预定义类别,那么使用名称作为键的单列表没有问题。如果没有帖子的类别不存在,您甚至不需要这个单列表。

实际上,名称不如代理键稳定。除非您期望庞大的数据集,否则您的DBMS不支持ON UPDATE CASCADE,或者您设计的数据库很差,这不是一个值得关注的问题。如果您的类别名称很长并且您期望有大量数据集,则记录大小,索引大小和连接性能可能会成为一个问题。另一方面,使用类别名称直接否定连接(使用类别表来获取名称)。您选择的关键分数与What are the design criteria for primary keys?

中指定的其他条件完全相同

总而言之,单列表适用于您指定的要求。