首页 > 解决方案 > 表中的唯一字段变体是什么

问题描述

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

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

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

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

标签: sqlpostgresqldatabase-design

解决方案


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

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

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

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


推荐阅读