知识卡片
SQL与关系模型不是一回事:正式术语与SQL术语的取舍原则
内容
“我懂SQL”不等于”我懂关系模型”,这是一个容易被忽略但代价很大的误解——很多数据库 从业者对关系模型的全部理解都来自他们所掌握的SQL知识,而这条路径本身就是危险的, 因为SQL在很多关系化问题上并不明确甚至有偏差(比如关系值和关系变量的区别、谓词和 命题的关联性、完整性约束的关键角色、信息原理),照着SQL的行为反推关系理论,得到的 理解很可能是错的。这个偏差在术语层面就已经开始:SQL用”表”“行”“列”这套更”用户友好” 的说法取代了关系模型正式的”关系”“元组”“属性”,这种替换在非正式场合无伤大雅,但如果 以真正理解关系理论为目标,就必须使用正式术语——因为”用户友好”的术语只是对真相的 近似,不能抓住关系、元组、属性这些概念的精确本质(比如后续会看到,关系不允许重复 元组、元组和属性都是无序的,但SQL的表恰恰在这几点上都与关系不同)。判断该用哪套 术语的准则很简单:只有当你确实理解真实情况时,用”用户友好”的说法才是安全的;如果 目标是学习和领会真实情况本身,就必须用正式术语,不能图省事而模糊了这层区别。
参考来源
- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第1章"做好准备"1.1节
"关系模型被严重地误解了"与1.2节"关于术语的一些说明"(源文件:OEBPS/text00007.html、
text00008.html)
- 结论依据:原文明确"如果你关于关系模型的知识仅仅来源于你所掌握的SQL知识,那么恐怕
你并没有很好地理解关系模型,而且你所知道的还有可能是错的。我认为:SQL和关系模型
不是一回事",并说明"关系并不是表,元组并不是行而属性也并不是列……只有当我们全都
理解'用户友好的'术语只是对于真相的近似而不能抓住事实本质时,它才是可接受的"。
- 原始内容:如果你关于关系模型的知识仅仅来源于你所掌握的SQL知识,那么恐怕你并没有
很好地理解关系模型,而且你所知道的还有可能是错的……真相是,关系并不是表,元组并
不是行而属性也并不是列……如果以学习和领会真实情况为第一要义的话,你需要使用正式
的术语。