读书频道 > 数据库 > SQL Server > SQL权威指南(第4版)
1.6 CREATE SCHEMA语句
2012-11-28 09:16:33     我来说两句 
收藏    我要投稿   

本文所属图书 > SQL权威指南(第4版)

本书为SQL 名著中文版,兼顾技术与实践,全面细致介绍高级技术,致力于打造SQL 编程专家。本书阐释了数据库设计、优化和操作的各方面内容,提供了成为SQL 编程专业人士所需的技术与技巧、针对新旧挑战性难题的...  立即去当当网订购

SQL 标准定义了CREATE SCHEMA语句,通过该语句能够一次性创建一个完整的数据库模式,事实上,几乎每种数据库产品都提供了辅助程序,帮助用户分配物理存储并创建数据库模式。这些辅助程序通常具有较大的差异,其中一些使用专有的语法来进行物理存储的分配。

数据库模式必须具有名称和默认字符集(多年前通常是8 位的ASCII 字符集或ISO 标准定义的简单拉丁字符集)。现在更常见的是Unicode(16位)字符集。CREATE SCHEMA 语句提供了一个可选的 n 授权o 子句,为安全性创建了一个访问控制所需的授权标识符。在此之后,就是一组模式元素的集合:
< 模式元素> ::=
  < 域定义> | < 数据表定义> | < 视图定义>
| < 授权语句> | < 断言定义>
| < 字符集定义>
| < 排序规则定义> | < 翻译定义>

在SQL 数据库中,模式就好比是数据库的骨架,它定义了模式对象的结构以及操作规则,而模式中的各类数据就好比是依附在骨骼之上的皮肉。

表是SQL 语言中唯一的数据结构,SQL 中的表可以是持久化的(基础表),  可以用于临时存储(临时表),可以是虚拟表(视图、公用表表达式和衍生表)。以上这些表在性能上没有差异,但在实现上是不同的。SQL 语言只使用一种数据结构(表),这大大简化了 SQL 处理。由于所有操作的返回类型也是表,因此无需对返回结果进行结构转换、编写特殊的操作符或是处理语言中的不规则问题。

< 授权语句> 限制用户只能访问特定的模式元素;断言可以被看做应用于整个模式的约束条件(constraint ),< 断言定义> 目前并没有广泛使用。而< 字符集定义>、< 排序规则定义> 和< 翻译定义> 则用于处理数据的显示。开发人员和普通用户并不需要关心上述模式对象,也不需要对这些对象进行设置,DBA(数据库管理员)将负责这些对象的设置和维护工作。

从概念上讲,表是零行或多行数据的集合,而行是一列或多列的集合。这个层次关系很重要。我们可以在模式、表、行或列级别上执行操作。例如DELETE FROM(删除语句)并不会移除列,而是将行移除,并留下模式中的基础表。无法删除行中的某列。

每一列都有一个特定的数据类型以及约束,该数据类型及约束便构成了某一抽象域的具体实现。由于只能通过SQL 访问表,因此表的物理实现方式并不重要。数据库引擎负责处理所有的细节,因此不必担心处理文件时所需要处理的内部事件。事实上,几乎没有两款SQL 产品会使用相同的内部数据结构。

对于习惯于文件系统或PC机的程序员而言,有两个常犯的概念性错误:第一个是认为表就是文件;第二个是认为表是电子表格。表与这两者表现都不相同。如果不了解这些基本概念,那你早晚会遇到麻烦。

很容易将表想象成文件,把行想象成记录,把列想象成字段;这些概念让人觉得熟悉。当将SQL 中的数据转移到宿主语言时,这些数据必须转换成宿主语言数据类型和数据结构,以供1显示和使用。而宿主语言也都有内建的文件系统。

使用文件系统和SQL 的一大区别在于,宿主语言加载SQL 的方式不同。在使用文件系统时,应用程序需要独立地打开 /  关闭各个文件,而使用SQL 时,程序每次执行连接 /  断开连接操作时,最小的工作单位是整个模式。虽然由于权限的关系,宿主程序也许无法查看或操作所有的表和其他模式对象,但这些对象已经是建立连接后加载数据的一部分了。

程序在文件中定义字段,而SQL 在模式中定义列。FORTRAN 语言使用FORMAT 和READ语句从文件中获取数据,与之相似,COBOL程序在数据部(data division)中定义字段,并使用READ语句读取字段。诸如此类,对于每一种第三代编程语言而言,文件读写的概念都是相同的,只是在语法和选项上有所差异。

在每个程序中,文件系统使我们可以用不同的名称引用同一数据。如果文件的布局发生了变化,就必须重写使用该文件的所有程序。另外,所有的空文件都没有区别。试图读取空文件时,程序将根据返回的EOF (文件末尾)标志执行后续操作。数据库模式定义了表的列名和数据类型,在合理的限度下,在宿主程序不知情的情况下可以对数据表进行修改。

宿主程序只需要关心如何将数据库中的数值转变成自己的变量。还记得高中数学课上学到的空集吗?空集也是一种有效集合。当一个表没有数据时,虽然它没有数据行,但仍包含列。因为表没有最后记录,因此不会通过设置EOF 标志抛出异常。

数据库与文件系统的另一大区别是,前者能够为表和列设置约束。约束是定义每次事务后数据库都需要满足哪些要求的规则。这也意味着,相对于被动的文件系统,数据库更像是对象的集合。

表并不是电子表格,尽管在屏幕上或打印输出时,它们看起来非常相似。我可以访问电子表格的行、列、单元格,也可以通过鼠标光标导航访问一组单元格。表没有导航的概念。电子表格中的单元格除了存储数据,还能存储指令。电子表格中的行和列并没有实质的区别,将行和列翻转之后,仍然可以获得正确的结果。SQL 表则不然。

它们唯一的共性是,电子表格也是一个声明性编程语言,只不过恰巧是一门非线性语言。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.5 模式对象
下一篇:数据库基础与实践技术(SQL Server 2008)
相关文章
图文推荐
3.8 实训项目
3.6 实现数据完整性
3.5.5 外键约束
3.5.3 检查约束
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站