首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL表中的ID字段:规则还是法律?

SQL表中的ID字段:规则还是法律?
EN

Stack Overflow用户
提问于 2019-05-21 00:55:17
回答 2查看 0关注 0票数 0

只是一个快速的数据库设计问题:你是否总是在每个表中使用ID字段,或者只是大多数?显然,您的大多数表都会受益,但是您是否曾经有过可能不想使用ID字段的表?

例如,我想添加向另一个表(foo)中的对象添加标签的功能。所以我有一个带有varchar字段的表FooTag来保存标记,还有一个fooID字段来引用foo中的行。我真的需要围绕一个基本上任意的ID字段创建聚簇索引吗?使用fooID和我的文本字段作为聚集索引会不会更有效率,因为我几乎总是会通过fooID进行搜索?另外,使用聚集索引中的文本可以保持数据的排序,使我在查询数据时更容易排序。缺点是插入需要更长时间,但不会被选择期间的增益所抵消,这种情况会更频繁地发生?

您对ID字段有何看法?可弯曲的规则,还是坚不可摧的法律?

编辑:我知道提供的示例未规范化。如果标记是项目的主要部分,有多个表被标记,以及其他“额外”,那么双表解决方案将是一个明确的答案。但是在这个最简单的情况下,归一化是否值得?它会节省一些空间,但在运行查询时需要额外的连接

EN

回答 2

Stack Overflow用户

发布于 2019-05-21 09:30:59

正如其他人所说的,这是一个一般的,而不是绝对的规则,并且有很多例外(例如,带有复合键的表)。

在一些偶尔但有用的场合,您可能希望在已经具有(通常为复合)唯一标识符的表中创建人工ID。例如,在一个系统中,我创建了一个存储部件号的表;尽管部件编号是唯一的,但实际上它们可能会改变-我们添加了一个任意整数PartID。不太常见,但这是一个典型的现实世界的例子。

票数 0
EN

Stack Overflow用户

发布于 2019-05-21 10:29:16

聚簇索引不需要在主键或代理(标识列)上。

但是,您的设计未正常化。通常,对于标记,我使用两个表,一个标签表(带有代理键)和一个从标签到主题表的链接表,使用标签表中的代理键和主题表中的主键。这允许您的标签应用于不同的实体(照片,文章,员工,位置,产品等)。它允许您对多个表强制执行外键关系,还允许您发明标记层次结构和有关标记表的其他内容。

就这个设计的索引而言,它将取决于使用模式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100001180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档