【问题标题】:difference between a primary key attribute and other attributes in a table [duplicate]表中主键属性与其他属性之间的区别[重复]
【发布时间】:2013-10-12 13:56:02
【问题描述】:

在数据库的同一张表中,主键和声明为UNIQUENOT NULL的属性有什么区别?

【问题讨论】:

  • 每个表只能有一个主键。
  • 您可能还想阅读上述重复链接中的第二条评论;)
  • 逻辑上没有区别。实际上,根据您的 DBMS 软件,可能会有一些细微的差别——通常与内部存储和索引有关。

标签: sql


【解决方案1】:

一个表中只能有一个主键,并且不能为空。您不必为主键显式指定 NOT NULL 属性。

表格中可以有多个唯一键。唯一键可以为空

当您将任何列指定为 NOT NULL 时,这意味着您不能将该列保留为 NULL

编辑:-

根据您的 cmets,您的表中不能有多个 主键

在实践中,唯一键约束并不意味着 NOT NULL 约束。除了为唯一键编写 NOT NULL 有什么用处,因为这是主键和唯一键之间的唯一区别。

【讨论】:

  • 如果我们指定一个唯一键不为空,那么它是否与主键相同?我们可以在一个表中拥有多个主键..
  • @user2847546:- 更新了我的答案。现在有帮助吗?
  • 谢谢拉胡尔先生,我现在知道了
  • 你在这里滥用了“key”这个词。根据定义,没有键(即候选键)可以允许空值。如果一个列允许空值,那么它肯定不是 key 列,无论它是否具有 UNIQUE 约束。所以说一个表中可以有多个键是正确的,但说一个键可以为空是错误的。
【解决方案2】:

不幸的是,SQL 约束被命名为主键,因为它混淆了逻辑实体主键相关但不同的概念和实体的物理存储主键。虽然逻辑和物理主键都使用相同的字段当然是可能的,而且这种情况并不罕见,但这不是必需的,也经常是不可取的。

逻辑实体主键是数据库教科书中讨论关系理论时提到的对象。 Normalizing 关系结构时引用的正是这个对象,它(当然)是逻辑模型中实体存在的候选键之一。

物理存储主键物理模型中的一个属性,可能是除了在逻辑模型中为实体,DBMS 使用它来唯一标识逻辑实体实例的存储。这是在定义实体存储的(物理)模式时在主键约束中引用的对象。当此物理存储主键逻辑实体主键不同时,最常见的原因是已将人工键附加到逻辑属性以:

  • 逻辑实体主键中启用字段更新;
  • 通过作为外键参考的更窄键来提高性能参考

所有逻辑实体候选键应在具有唯一性约束的物理模型中定义。只有物理存储主键成为主键约束。

【讨论】:

  • “主键”作为物理存储功能的想法早于关系模型。该术语的关系和 SQL 用法正在这里讨论,这是严格的逻辑,而不是物理构造。更准确地说,一些 SQL DBMS 不明智地使用 逻辑 主键作为某些物理存储功能的提示,从而损害了物理数据独立性的原则。然而,情况并非普遍如此,假设物理总是遵循逻辑是一个坏主意。更糟糕的是假设逻辑应该遵循物理。
  • @sqlvogel:我的观点是这两个概念是不同的,通常不是同一组属性,因此应该使用不同的名称来引用以避免混淆。我不清楚你是同意还是不同意。
  • PRIMARY KEY 不是 SQL DBMS 中的两个概念,因为键是一个逻辑特性而不是物理特性。这就是我不同意的。但是,在重新阅读您的答案时,我想我明白您所说的“逻辑”是数据库表的初步设计,而“物理”的意思是实现 的数据库表。那正确吗?我建议您在 SO 上使用此类术语时要非常小心,因为它们通常会导致混淆。在数据库理论术语中,键和表始终是数据库的逻辑特征。
  • @sqlvogel:完全正确!然而,DBMS(即物理)约束被称为主键约束,这是术语的混淆。我可能并不完全了解这些术语,但我提出了一种可以消除混淆的替代术语;并允许更清晰的思维和更清晰的沟通。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 2015-05-19
相关资源
最近更新 更多