第1章 名称与数据元素 1
名称 2
注意名称长度 2
在名称中避免使用所有特殊字符 3
避免使用引号分隔标识符 4
实施大写规则以避免大小写区分问题 5
遵循ISO-11179标准命名规范 6
SQL的ISO-11179 7
抽象级别 8
避免使用描述性前缀 9
制定标准化的后缀 11
表和视图名称应当是遵循业界标准的、集合、类或复数名称 13
相关名基本上也要遵循与其他名称相同的命名规则 14
关系表名应当是常用描述术语 15
元数据模式访问对象的名称可以包含结构信息 16
命名数据元素时遇到的问题 16
避免模糊名称 16
避免名称在不同的地方改变 17
不要使用专有暴露的物理定位符 19
第2章 字体、标点和间距 21
版式与代码 21
名称中只使用大小写字母、数字和下划线 23
列名、参数和变量等标量小写 23
模式对象名首字母大写 23
保留字大写 24
避免使用驼峰命名法 26
单词间距 27
遵循规范标点规则 27
使用完全保留字 29
如果在使用的SQL产品中有标准保留字,就不要使用专有保留字 30
如果有标准语句,就不要使用专有语句 31
疏排版面的隔空白道和垂直间距 33
缩进 34
使用行间距将语句分组 35
第3章 数据定义语言 37
将默认值放到合适的地方 37
默认值的类型应当与列的类型相同 38
不要使用专有数据类型 38
将PRIMARY KEY声明放在CREATE TABLE语句的开头 40
将列按照逻辑顺序排列并按照逻辑组聚合 40
将参考约束和操作在数据类型下面缩进 41
在产品代码中为约束命名 41
将CHECK()约束放在所检查的内容附近 42
对数值考虑使用范围约束 42
对于字符值考虑使用LIKE和SIMILAR TO约束 43
时间值是有长短的 43
避免使用REAL和FLOAT数据类型 43
将多列约束尽可能靠近这些列 43
将表级别的CHECK()约束放到表声明的最后 44
对多表约束使用CREATE ASSERTION 44
使CHECK()约束的目的唯一 45
每个表都必须有键才能称为表 45
自动编号不是关系型键 47
文件不是表 47
键的属性 49
不要分割属性 56
分割为多个表 56
分割为多个列 56
分割为多个行 58
不要对RDBMS使用面向对象的设计 59
表不是对象实例 60
对RDBMS不要使用EAV设计 61
第4章 尺度与测量 63
测度论 63
范围与颗粒度 65
范围 65
颗粒度、准确度和精度 65
尺度类型 66
名义尺度 66
种类尺度 67
绝对尺度 67
顺序尺度 68
级别尺度 69
间距尺度 69
比例尺度 69
使用尺度 70
尺度转换 71
导出单位 72
标点与标准单位 73
在数据库中使用尺度的一般准则 74
第5章 数据编码方案 77
不好的编码方案 77
编码方案类型 80
枚举编码 80
测量编码 80
缩写编码 81
算法编码 81
层次编码 82
向量编码 83
拼接编码 84
设计编码方案的一般准则 85
现有的编码标准 85
允许扩展 85
使用显式的丢失值避免NULL 86
为终端用户转换编码 86
在数据库中保存编码 89
多字符集 90
第6章 编码选择 91
选择标准构造,不要选择专有构造 92
使用标准OUTER JOIN语法 93
中缀INNER JOIN和CORSS JOIN语法是可选的,但是很好用 97
使用ISO时间语法 98
使用标准和可移植的函数 99
选择紧凑格式,不要选择松散格式 99
避免使用多余的括号 100
使用CASE系列表达式 101
避免使用冗余表达式 103
寻找紧凑格式 104
使用注释 107
存储过程 108
控制语句注释 108
对子句的注释 109
避免优化器提示 109
触发器的优先级不应当高于DRI操作 109
使用SQL存储过程 111
避免在数据库中使用用户定义函数和扩展 112
多语言问题 112
可移植性问题 113
优化问题 113
避免使用过度的辅助索引 113
避免使用关联子查询 114
避免使用UNION 115
测试SQL 118
测试NULL所有可能的组合 118
检查并测试所有的CHECK()约束 118
注意字符列 118
测试大小 119
第7章 如何使用视图 121
视图的命名规范与表一样 123
视图提供行和列级别的安全性 124
视图确保了有效访问路径 125
视图对用户隐藏了复杂性 125
视图确保了正确的数据派生 127
视图将表和/或列重新命名 127
视图实施复杂的完整性约束 127
可更新的视图 130
WITH CHECK OPTION子句 130
INSTEAD OF触发器 131
每个视图都要有创建的原因 131
避免视图的数量快速增长 132
将视图与基表同步 132
不恰当地使用视图 133
用于域支持的视图 133
单个解决方案的视图 134
不要为每个基表都创建视图 135
学习使用物化的视图 135
第8章 如何编写存储过程 137
大多数SQL 4GL都不是用于应用程序的 138
基本软件工程 138
内聚 139
耦合 140
使用传统的结构化编程 141
避免可移植性问题 143
避免创建临时表 143
避免使用游标 144
面向集合的构造优于过程化代码 146
标量与结构化参数的对比 151
避免使用动态SQL 152
性能 152
SQL注入 153
第9章 试探法 155
将规格说明表达为清晰的语句 156
在名词的后面加上“……的集合” 156
从问题语句中删除行为动词 157
仍然可以使用存根 157
不要担心数据的显示 160
第一次尝试需要特别处理 160
不要舍不得扔掉你对DDL的第一次尝试 161
保存你对DML的第一次尝试 161
不要以方框和箭头的方式思考 162
画圆圈和集合图 162
学习方言 163
假设WHERE子句是“巨型变形虫” 163
使用新闻组和因特网 164
第10章 以SQL的方式思考 165
不好的SQL编程方式与过程化语言 166
把列当作字段思考 170
以过程化而不是说明性的方式思考 172
模式应该看起来像输入格式 174
附录A 资源 177
附录B 参考文献 183
索引 187