表中的唯一字段变体是什么



我正在编写一个脚本,用于在将数据插入表之前检查唯一约束冲突。

忽略主键,还有比这些更多的变化吗?

  1. 表中仅存在一个唯一字段
  2. 表中存在多个唯一字段
  3. 存在一个唯一的字段,它是一个复合的(字段的唯一组合(
  4. (1 或 2(与 3 的组合

变体 2 有什么意义吗?它是在实践中使用还是会被认为是糟糕的设计?

您的问题中缺少的单词是KEY。一个表可以有零个、一个或多个键。在关系数据库中,表必须至少有一个键,但 SQL DBMS 允许没有键的表。

任何键都可以由零个、一个或多个属性组成。键有时会重叠 - 这意味着一个键中的属性也是另一个键中的属性,尽管这相对不常见。

键也可能具有零属性。单例表 - 限制为(最多(一行的表就是这种情况。Oracle 中的 DUAL 系统表就是一个众所周知的例子。不幸的是,SQL不支持"空"键语法,但有一些解决方法可用于实现相同的效果。

通常,会根据已知的键检查数据。从数据派生键通常不是一个有用的练习,除非你的数据确实永远不会改变。如果一个表只有 10 个(不可为空(属性,那么在 1024 个可能的超级键中,它可能最多有 252 个键,因此检查所有可能性是一个相当困难的问题。

只是为了补充所有其他评论,是的,根据您的商业模式,所有这些变化都是可能的和推荐的。商业模式是驱动所有限制的因素。举个例子:

create table employee (
id int primary key not null,
name varchar(50) not null,
ssn varchar(10) not null,
branch_id int not null,
in_branch_serial int not null,
constraint uq_name unique (name),
constraint uq_ssn unique (ssn),
constraint uq_employee_number unique (branch_id, in_branch_serial)
);

此表包含:

  • id是唯一的,因为它是主键。
  • name也是独一无二的,我们决定以这种方式想要它。
  • 根据我们的商业模式,ssn也是独一无二的。
  • branch_id+in_branch_serial组合是独一无二的。同一分支上的员工将具有相同的branch_id,但两列的组合将是唯一的。

最新更新