内容简介
确保你的SQL代码正确,确保你的数据库模式是健壮且可维护的办法,就是理解SQL底层的理论。如果不能很好地精通这个理论,你可能就会陷入到很多陷阱中。在《SQL与关系数据库理论》中,作者C.J. Date阐述了你该如何把关系理沦直接应用到SQL的应用中。通过大量的示例及其背后的推理阐述,你将学会如何处理如下的很多常见难题: 数据库是否应该使用视图而不是基表来访问? 数据库中的Null是否使你得到了错误的答案,为什么?关于Null,你又可以做些什么呢?是否可以编写一个SQL查询,通过这个查询,可以得到在同一个部门中同时工作超过六个月的员工? SQL支持“量化的比较”,但是避免使用它们。 为什么?你又该如何来避免使用它们?约束是重要的,但是大部分的SQL一产品都没有恰当地支持它们。为了解决这个问题,你能做些什么呢? 自E.F Codd于1969年次定义关系模式以来,数据库理论与实践就一直在发展。《SQL与关系数据库理论》独立于任何SQL,产品,描绘了关系数据库理论十几年来的研究进展,为读者介绍了有关关系数据库理论的知识。任何具有一定SQL,知识的人都可以从《SQL与关系数据库理论》的很多方面受益。C.J. Date于1970的早期在IBM开始从事数据库方面工作。他是一个多产的作者,其的教材是“An Introduction to Database Systems(Addison-Wesley)”,该书被广泛地认为是关于数据库管理基础知识的教科书之一。数据库是否应该使用视图而不是基表来访问?数据库中的Null是否使你得到了错误的答案,为什么?关于Null,你又可以做些什么呢?是否可以编写一个SQL查询,通过这个查询,可以得到在同一个部门中同时工作超过六个月的员工?SQL支持“量化的比较”,但是避免使用它们。为什么?你又该如何来避免使用它们?约束是重要的,但是大部分的SQL一产品都没有恰当地支持它们。为了解决这个问题,你能做些什么呢?
目录
前言
第1章 设置场景
关系模式是容易被误解的
一些术语的注释
法则,而不是产品
模式的一个回顾
模型和实现
关系的特性
基础关系和产生的关系
关系和关系变量
值和变量
结论
练习
第2章 类型与域
类型和关系
等式比较
数据值的原子性
什么是类型
标量和非标量类型
SQL中的标量类型
SQL中的类型检查和强制类型转换
SQL中的一些整序
SQL中的行和表类型
结论
练习
第3章 元组与关系、行和表
什么是元组
SQL中的行
什么是关系
关系和它们的关系体
关系是n维的
关系比较
TABLE—DUM和TABLE—DEE
SQL中的表
SQL中列的命名
结论
练习
第4章 无重复与无空值
重复有什么问题
复行:进一步讨论
在SQL中避免复行
空值有什么错
在SQL中避免空值
对外连接的评论
结论
练习
第5章 基本关系变量与基本表
数据定义
更新是集合级别的
关系赋值
更多关于候选键的内容
关于外键更多的讨论
关系变量和断言
关系和类型
练习
第6章 SQL与关系代数Ⅰ:原始的操作符
一些预备知识
有关闭包的更多讨论
约束
投影
连接
并、交和差
哪些操作符是原始的
每次都形成表达式的一小步
关系表达式的意思是什么
求一个表表达式的值
表达式转换
属性名字上的依赖
练习
第7章 SQL与关系代数Ⅱ:附加的操作符
半连接和半差
扩展
映像关系
除
聚集操作符
映像关系再讨论
概要
概要再论
分组和不分组
what if查询
ORDER BY如何
练习
第8章 SQL与约束
类型约束
SQL中的类型约束
数据库约束
SQL中数据库约束
事务
为什么数据库约束的检测必须是实时的
难道某些检测不是不得不被推迟吗
约束和谓词
各种各样的问题
练习
第9章 SQL与视图
视图是关系变量
视图和谓词
获取操作
视图和约束
更新操作
视图是为了什么
视图和快照
练习
第10章 SQL与逻辑
简单和复合的命题
简单和复合的谓词
定量
关系计算
更多的关于量化
一些等价形式.
结论
练习
第11章 使用逻辑来形式化SQL表达式
一些转换规则
例子1:逻辑隐含
例子2:普遍的限定
例子3:隐含和一般的限制
例子4:相关的子查询
例子5:命名子查询
例子6:更多的关于命名子表达式
例子7:处理不确定性
例子8:使用COUNT
例子9:连接查询
例子10:限制
例子11:ALL或者ANY比较
例子12:GROUP BY和HAVING
练习
第12章 SQL主体杂项
SELECT
显表
名字限定
范围变量
子查询
“可能的非确定”表达式
空集
SQL表表达式的BNF范式语法
练习
附录A 关系模式
附录B 数据库设计理论
附录C 练习答案
附录D 进一步阅读
摘要与插图
视图是为了什么到目前为止,本章都是假设你已经知道视图为的是什么——但是尽管如此我还是想就这个主体说上一些。事实上,视图有两个截然不同的目的:
·那些定义视图V什么的用户,显然是知道相应的视图定义表达式x的。因此这个用户可以在任何期望使用表达式x的地方使用名字y,但是这样的用法只是基本缩写,并且明显地这个正在讨论的用户理解这个缩写。
·相反,那些仅是被通知嗍实存在以及这个,是可用的用户是被假设(至少理想情况下)不知道这个表达式x的,对于这些用户,事实上,v是被假设成看上去并且感觉像是一个基关系变量,就像我已经详细地解释的那样。并且这是视图的第二个事实上重要的用法,这也是本章到目前为止我的焦点所在。
逻辑数据独立
前面介绍的第二个目的与逻辑数据的独立这个问题密切相关。回忆一下第1章中物理数据上的独立的意思是我们可以改变数据的物理存储的方式并且由用户感觉到的数据的访问方式不需要做相应的改变。因此,相当的足够,逻辑数据的独立意味着我们可以改变数据逻辑上的存储方式并且用户感觉到的数据的访问方式不需要做相应的改变。并且视图被假设用来提供的就是这个逻辑数据的独立。








