gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:20:45 25 4
gpt4 key购买 nike

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 分钟/小时/无论如何运行一次。一次性对 N 百万条记录执行重复数据删除比检查表中每次插入的唯一性要快(相信我)。

作为关系数据库出售的内容并不仅仅用作关系数据库。它们被用作日志、键值存储、图形数据库等。它们可能没有竞争对手的所有功能,但有些有,而且拥有一个不适合您的关系模型的表通常比创建更简单一个完整的其他数据库并遭受数据传输性能损失。

tl;博士 人们在数学上并不完美,因此不会总是使用数学上完美的方法来做某事。委员会由人组成,有时可以意识到这一点。

关于sql - 为什么 SQL 标准允许重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30767562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com