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