微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么SQL标准允许重复行?

关系模型的 core rules之一是元组(行)所需的唯一性:

Every individual scalar value in the database must be logically addressable by specifying the name of the containing table,the name of the containing column and the primary key value of the containing row.

sql世界中,这意味着表中永远不会存在两行,所有列值都相等.如果没有有意义的方法来保证唯一性,则可以向表格提供代理键.

当第一个sql标准发布时,它没有定义这样的限制,从那时起它就像这样.这似乎是所有邪恶的根源.

是否有任何有意义的理由决定采用这种方式?在实际的世界中,没有这种限制可以证明是有用的吗?它是否超过缺点?

解决方法

您假设数据库仅用于存储关系数据;这当然不是他们所用的,因为实际的考虑永远都会赢.

一个不需要主键的明显例子是某些描述的“状态”日志(天气/数据库/无论如何).如果您永远不会查询此表中的单个值,则可能不希望拥有主键以避免必须等待插入到键中.如果你有一个用例从这个表中获取一个值,那么肯定,这将是一个糟糕的解决方案,但有些人不需要它.如果绝对必要,您可以随后添加代理键.

一个例子是写密集型应用程序需要告诉另一个进程做某事.这个辅助过程每N分钟/小时/无论如何运行.对N0000个记录进行一次性重复数据删除比检查每个插入表中的唯一性更快(相信我).

作为关系数据库销售的产品不仅仅用作关系数据库.它们被用作日志,键值存储,图形数据库等.它们可能没有竞争对手的所有功能,但有些可以做到并且通常更简单的是让单个表不适合您的关系模型而不是创建整个其他数据库并遭受数据传输性能损失.

tl; dr人们在数学上并不完美,因此不会总是使用数学上完美的做法.委员会由人组成,有时可以实现这一目标.

原文地址:https://www.jb51.cc/mssql/78722.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐