知识卡片

参照操作不属于关系模型但可合理叠加

普通读书笔记卡

内容

ON DELETE CASCADE这样的参照操作(触发事件+触发操作合起来构成触发器) 在实践中很有用,但严格说它们不是关系模型的组成部分——关系模型本身既没有也 不需要规定任何具体的触发过程机制。书中借此提出一条判断”某个附加特性该不该 叠加在关系模型之上”的通用标准:关系模型是数据库领域的基础,但仅仅是基础, 只要一个附加特性不违反关系模型的既有规定,而且符合模型的精神、确实有用, 就应该在这个基础之上或伴随这个基础去构建它——这不是什么问题,反而正是关系 模型作为”地基”该有的样子。书中给出三个具体例证:类型理论([[类型的正式定义 与类型生成器]]中已说明”类型正交于表”,关系模型本身没规定类型系统的细节, 但一个健全的关系系统显然需要全面而正规的类型支持,包括用户定义类型甚至类型 继承);触发过程(触发操作在实践中经常导致违反关系模型的集合本质和[[关系赋值 统一INSERT_DELETE_UPDATE与赋值原理]],所以关系模型应该对触发操作的行为方式 给出一些约束性规定,但并不需要、也没有规定具体的触发过程机制本身);恢复与 并发控制(关系模型几乎没有直接谈到它们,但这不代表关系型系统不该提供,只是 这块内容不属于模型规定的范畴)。这条判断标准的价值在于避免两种极端:既不能 因为某个特性”关系模型里没写”就认为它不该存在,也不能反过来把任何附加特性都 不假思索地塞进”关系模型”这个概念本身,混淆了”模型的核心规定”与”建立在模型 之上、符合其精神的合理扩展”这两个层次。

参考来源

- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第5章"基关系变量和 基表"5.4节"关于外键的更多内容"(源文件:OEBPS/text00055.html) - 结论依据:原文明确"参照操作在实践中可能很有用,但是它并不是关系模型的组成 部分。这不是问题!关系模型是数据库领域的基础,但它仅仅是基础而已。也就是说, 只要一个附加的特性不违反关系模型的规定……那么就应该这个基础之上或随模型一起 构建这些附加的特性",并以类型理论、触发过程、恢复和并发三个例子加以说明。 - 原始内容:参照操作在实践中可能很有用,但是它并不是关系模型的组成部分。这 不是问题!关系模型是数据库领域的基础,但它仅仅是基础而已……只要一个附加的 特性不违反关系模型的规定……那么就应该这个基础之上或随模型一起构建这些附加 的特性。