【发布时间】:2013-10-12 13:56:02
【问题描述】:
在数据库的同一张表中,主键和声明为UNIQUE和NOT NULL的属性有什么区别?
【问题讨论】:
-
每个表只能有一个主键。
-
您可能还想阅读上述重复链接中的第二条评论;)
-
逻辑上没有区别。实际上,根据您的 DBMS 软件,可能会有一些细微的差别——通常与内部存储和索引有关。
标签: sql
在数据库的同一张表中,主键和声明为UNIQUE和NOT NULL的属性有什么区别?
【问题讨论】:
标签: sql
一个表中只能有一个主键,并且不能为空。您不必为主键显式指定 NOT NULL 属性。
表格中可以有多个唯一键。唯一键可以为空
当您将任何列指定为 NOT NULL 时,这意味着您不能将该列保留为 NULL
编辑:-
根据您的 cmets,您的表中不能有多个 主键。
在实践中,唯一键约束并不意味着 NOT NULL 约束。除了为唯一键编写 NOT NULL 有什么用处,因为这是主键和唯一键之间的唯一区别。
【讨论】:
不幸的是,SQL 约束被命名为主键,因为它混淆了逻辑实体主键的相关但不同的概念和实体的物理存储主键。虽然逻辑和物理主键都使用相同的字段当然是可能的,而且这种情况并不罕见,但这不是必需的,也经常是不可取的。
逻辑实体主键是数据库教科书中讨论关系理论时提到的对象。 Normalizing 关系结构时引用的正是这个对象,它(当然)是逻辑模型中实体存在的候选键之一。
物理存储主键是物理模型中的一个属性,可能是除了在逻辑模型中为实体,DBMS 使用它来唯一标识逻辑实体实例的存储。这是在定义实体存储的(物理)模式时在主键约束中引用的对象。当此物理存储主键与逻辑实体主键不同时,最常见的原因是已将人工键附加到逻辑属性以:
所有逻辑实体候选键应在具有唯一性约束的物理模型中定义。只有物理存储主键成为主键约束。
【讨论】: