sql - 表中的唯一字段变体是什么
问题描述
我正在编写一个脚本,在将数据插入表之前检查唯一约束冲突。
忽略主键,还有比这些更多的变化吗?
- 表中只存在一个唯一字段
- 表中存在多个唯一字段
- 存在一个独特的字段,它是复合的(字段的唯一组合)
- (1 或 2) 与 3 的组合
变体 2 有意义吗?它是在实践中使用还是会被认为是糟糕的设计?
解决方案
您的问题中缺少的单词是KEY。一个表可以有零个、一个或多个键。在关系数据库中,表必须至少有一个键,但 SQL DBMS 确实允许表没有键。
任何键都可以由零个、一个或多个属性组成。键有时会重叠——意味着一个键中的属性也是另一个键中的属性,尽管这相对不寻常。
一个键也可以有零个属性。单例表就是这种情况 - 表被限制为(最多)一行。Oracle 中的 DUAL 系统表就是一个众所周知的例子。不幸的是,SQL 不支持“空”键语法,但有一些解决方法可以达到相同的效果。
通常,数据会根据已知的密钥进行检查。除非您的数据真的永远不会改变,否则从数据中派生密钥通常不是一个有用的练习。如果一个表只有 10 个(不可为空的)属性,那么它在 1024 个可能的超级键中最多可能有 252 个键,因此检查所有可能性是一个相当困难的问题。
推荐阅读
- python - 如何将 Docx 转换为 HTML
- datetime - Java 8 本地日期时间
- javascript - 我的 CSS 在 React 项目中被 Bootstrap 覆盖
- java - PeerListListener 不工作?它表明没有使用 PeerListListener,但是在广播类中我使用了它??所以不知道哪里错了?
- javascript - 如果赛普拉斯是端到端测试框架,为什么它有集成测试文件夹?
- javascript - 变量和标识符之间的差异(如果有)
- fluentui-react - 这些奇怪的填充值在 Microsoft 的 Fluent-react 库中意味着什么?
- python - 在只有分钟和秒数据的数据框中生成小时和天 - Python
- excel - EXCEL:计数范围;但排除空格和特定字符串
- node.js - 如何在 angularJS 中读取 Linux 系统环境变量并在 Angular9 中的 require() 中传递该值