当前位置: 首页 > 面试题库 >

SQL主键-是否有必要?

卞俊贤
2023-03-14
问题内容

我有项目清单。这些物品大多数都没有库存。项目表具有ID,名称,描述。项目数量存储在另一个名为清单的表中。库存表具有item_id和库存数量。

我是否需要库存表的主键?如果是这样,我应该使用序列密钥还是复合密钥?什么时候可以没有主键的表?

编辑:谢谢大家提供的非常有益的信息。我现在将始终拥有主键,除了极少数的例外。我还学到了更多关于串行键和复合键的信息。


问题答案:

始终以拥有主键为目标。

如果不确定,请使用主键。

即使您99.99%的人肯定会不需要它,也要准备一份。正如我从多年的经验中学到的,需求发生了变化。

我真正想到的唯一示例是多对多表,其中只有两个foreign_keys和超大型(亿万行)表,每个字节都很重要。但是即使那样,仍然仍然强烈建议使用单独的,唯一的,没有业务价值的id密钥。

有关此的更多信息,请访问: http
//weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx

在您的示例中,我肯定会有一个。

“不”拥有一个人的决定应该基于非常明确的需求以及对拥有一个人的实际或预测(例如数量)问题的理解。

在调试和故障排除时,便出现了这种需求的一个很好的例子。就像在每个表中创建和更新列(我的另一个最爱)一样,此信息最初可能不会被前端使用/用于前端,但是男孩可以帮助您跟踪和解决问题。(btw更新戳现在通常在诸如
Ruby On Rails之 类的框架中是标准的,它也与每个具有id字段的表的约定都很好地兼容!)



 类似资料:
  • 问题内容: 请清除我对此的疑问,在SQL Server(2000及更高版本)中,主键是自动对群集索引的吗?还是我们可以选择在主键上使用非群集索引? 问题答案: 不,它可以是非集群的。但是,如果您没有明确将其定义为非聚集索引,并且表上没有聚集索引,则会将其创建为聚集索引。

  • 主要内容:示例,删除主键主键(Primary Key)由表中的一个或者多个字段构成,用来唯一标识表中的每一行记录。可以将主键类比为学号、身份证号、车牌号或者 ID。 主键必须包含唯一值,换句话说,所有记录的主键都不能出现相同的值。此外,主键必须是一个具体的值,不能是 NULL 值。 当主键包含多个字段时,又称为复合键(Composite Primary Key)。 注意事项 在设计主键时,应使用尽可能少的字段,这不但能减

  • 问题内容: 考虑下面的示例表(假设SQL Server 2005): 我正在考虑一个复合主键,该主键包含两个product_id列(我肯定会想要一个唯一约束),而不是一个单独的唯一ID列。从性能的角度来看,问题是该主键是否应该集群? 我是否还应该在每个ID列上创建一个索引,以便更快地查找外键?我相信该表在读取方面比在写入方面会受到更多的打击。 问题答案: 正如其他一些人已经说过的那样,这取决于您如

  • 问题内容: 是否有ANSI SQL替代MYSQL LIMIT关键字? LIMIT关键字限制SELECT返回的行数,例如: 返回2行。 在前10个之后返回2行。 问题答案: 这显示了不同的方式:

  • 问题内容: 在使用Linq to SQL时,对多对多关系表使用多列(复合)主键是否有益? 还是应该仅将身份列添加为非群集主键并适当地索引FK列? 问题答案: 不是LINQ问题。如果您的架构需要它们,请使用它们。如果您不这样做,请不要。无论哪种方式,LINQ都能很好地处理您的架构。 LINQ to SQL不能很好处理的一个领域是用于连接多对多关系的多列/键映射表,但是我不会说这严格属于您的问题解决的

  • 本文向大家介绍SQL 添加主键,包括了SQL 添加主键的使用技巧和注意事项,需要的朋友参考一下 示例 这会将一个主键添加到该字段上的表employees ID。在括号中包含多个列名以及ID将创建一个Composite Primary Key。当添加多个列时,列名称必须用逗号分隔。