中的一个核心规则 http://en.wikipedia.org/wiki/Codd%27s_12_rules对于关系模型来说,元组(行)所需的唯一性是:
数据库中的每个单独的标量值must通过指定包含表的名称、包含列的名称和首要的关键包含行的值。
在 SQL 世界中,这意味着表中永远不可能存在所有列值都相等的两行。如果没有有意义的方法来保证唯一性,则可以向表提供代理键。
当第一个 SQL 标准发布时,它没有定义这样的限制,从那以后一直如此。这似乎是一切邪恶的根源。
决定这样做有什么有意义的理由吗?在现实世界中,没有这种限制在哪里会被证明是有用的呢?它是否超过了缺点?
简而言之,SQL 不是关系型的,SQL DBMS 也不是关系型 DBMS。
重复行是 SQL 数据模型的基本部分,因为 SQL 语言并不真正尝试实现关系代数。 SQL 使用基于包(多重集)的代数来代替。关系代数中的查询和其他运算的结果是始终具有不同元组的关系,但 SQL DBMS 无法仅处理关系。鉴于 SQL 语言的这一基本“功能”,SQL 数据库引擎需要具有处理和存储重复行的机制。
为什么 SQL 是这样设计的?一个原因似乎是,关系模型在当时是一个太大的信念飞跃。关系模型是一个远远超前于时代的想法。另一方面,SQL 过去和现在仍然深深扎根于三十年前的系统中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)