2 数据库概念
本章描述基本数据库概念并着重讨论一下主题:
• 数据模型
• 多用户
• 数据库术语
• SQL(结构化查询语言)
2.1 数据模型的说明
在数据库中收集的信息与在文件中收集的信息的主要差异是组织数据的方式。平面文件是以物理方式组织的;一些项置于其他项的前面或后面。但数据库的内容时根据数据模型组织的。数据模型是一个方案或一个图,它定义数据单元并指定每个单元如何与其它单元相关联。
例如,某个数字可以出现在文件或数据库中。在文件中,它指示出现在文件中某个位置的数字。但是,数据库中的数字具有数据模型指定给它的角色。该角色可能是一个价格,与作为客户预订订单中某一商品销售的产品相关联。价格、产品、商品、订单和客户等组件中的每一个也具有数据模型指定的角色。有关数据模型的说明,请参阅下图。
图: 使用数据模型的优点
当创建数据库时就会设计数据模型。然后根据模型布局的规划插入数据单元。有些书籍使用术语模式而不是数据模型。
2.1.1 存储数据
数据库和文件之间的另一个差异是数据库的组织方式是与数据库一起存储的。文件可能具有复杂的内部结构,但该结构的定义不在该文件中;结构的定义在创建或使用
文件的程序中。例如:字处理程序存储的文档文件可能包含描述文档格式的详细结构。但是,只有字处理程序能够译解该文件的内容,因为结构是在程序而不是文件中定义的。然而,数据模型包含在它描述的数据库中。它与数据库融为一体。并且可用于使用该数据库的任何程序。模型不但定义数据项的名称,而且定义数据项的数据类型,因此程序可以使它自己适应该数据库。例如:某个程序可发现在当前数据库中,价格项是八位数的十进制数,小数点右边有两位数;于是它可为该类型的数分配存储器。在 SQL 编程和通过 SQL程序修改数据中讨论了程序如何使用数据库的主题。
2.1.2 查询数据
数据库与文件的另一个差异是访问它们的方法。您可以按顺序搜索文件。在每一行或每一个记录的特定物理位置查找特定值。即,可询问“哪个记录在第一个字段中具有数字1013?”,下图显示了此搜索类型。
图: 按顺序搜索文件
相反,当查询数据库时,使用模型定义的条件,可以带着如下问题来查询数据库,“New Jersey的客户 Shimara 公司生产的产品下了哪些装运日期在第三季度的订单?” 下图显示了此类查询。
图: 查询数据库
换言之,当范围存储在文件中的数据时,必须以该文件的物理布局的形式陈述您的问题。当查询数据库时,可以忽略计算机存储器的繁琐细节并以反映现实世界的方式(至少是数据模型反映现实世界的方式)陈述您的查询。编写 SELECT 语句和编写高级 SELECT 语句讨论了用于进行查询的语言。
2.1.3 修改数据
数据模型还使修改数据库内容而少出错成为可能。可以使用如下语句查询数据库,“查询制造商为 Presta 或 Schraeder 的每个库存商品,并将其价格提高 13%”。以反映数据意义的形式说明更改。不必浪费时间与精力来考虑文件中记录内字段的详细信息,因此出错的几率也减小。在修改数据中描述了用来修改存储数据的语句。
2.2 并发使用和安全性
数据库可以是许多用户的公共资源。多个用户可以同时查询和修改一个数据库。数据库服务器(管理所有数据库的内容的程序)确保查询和修改顺序完成而不会产生冲突。数据库并发用户具有许多优点,但也引入了新的安全性和隐私问题。某些数据库是专用的,是个人建立以供自己使用的。其它一些数据库包含必须共享(但仅在受限组中共享)的机密材料;还有其它数据库提供公用访问权。
2.2.1 控制数据库使用
GBase 8s 数据库软件提供控制数据库使用的方法。当您设计数据库时,可以执行以下任何功能:
• 使数据库完全专用
• 对所有用户或选择的用户开放其全部内容
• 限制某些用户可以查看的数据选择(不同的数据选择适用于不同的用户组)
• 允许指定的用户查看特定项,但不能修改它们
• 允许指定的用户添加新数据,但不能修改旧数据
• 允许指定的用户更修改全部现有数据或现有数据的指定项
• 确保添加或修改的数据符合数据模型
访问管理策略
GBase 8s 支持两种访问管理系统:
基于标签的访问控制(LBAC)
基于标签的访问控制是强制访问控制的实现。它通常在存储高度敏感数据的存储库中,如由军队或保安服务公司保卫的系统。与 LBAC 相关的 GBase 8s 的主要文档是GBase 8s 安全指南 。描述了数据库管理员(DBSA)如何创建和维护 LBAC 安全对象,此类管理员必须被授授予(DBSECADM)角色,并且该角色只能由数据库系统管理员(DBSA)授予。
自主访问控制(DAC)
自主访问控制是更为简单的系统,涉及的开销少于 LABC 。根据访问特权和角色,DAC 在所有的 GBase 8s 数据库中都启用,包括实现 LBAC 的数据库。
创建和授予角色
为了支持 DAC,数据库管理员(DBA)可以定义角色并将角色指定给用户。从而对需要访问相同数据库对象的用户组的访问特权进行标准化。当 DBA 将特权指定给角色时,一旦激活该角色,被授予该角色的每个用户都具有这些特权。为了激活特定角色,用户必须发出 SET ROLE 语句。用于定义和操纵角色的 SQL 语句包括:CREATE ROLE 、DROPROLE 、GRANT 、REVOKE 和 SET ROLE。
有关定义和操作角色的 SQL 语法语句,请参阅《GBase 8s SQL 指南:语法》。
创建和授予角色:
- 使用 CREATE ROLE 语句在当前数据库中创建新的角色。
- 使用 GRANT 语句将访问特权授予该角色。
- 使用 GRANT 语句将角色授予用户或 PUBLIC (所有用户)。
- 用户必须发出 SET ROLE 语句来启用该角色。
为缺省角色定义和授予特权
DBA 还可以定义一个缺省角色以将该角色分配给特定数据库的单个用户或 PUBLIC 组。当用户与该数据库建立连接后,不需要用户发出 SET ROLE 语句,该角色将自动激活。在连接时,拥有缺省角色的每个用户都具有单独为该用户授予的访问特权以及缺省角色的特权。对于给定用户,在给定时间内只有一个 CREATE ROLE 语句定义的角色可以生效。如果同时拥有缺省角色和一个或多个其它角色的用户使用 SET ROLE 语句使非缺省角色成为活动角色,那么仅授予缺省角色(不单独对用户,对 PUBLIC 或对新活动角色授予)的任何访问特权该用户将不再有效。同一用户可以发出 SET ROLE DEFAULT语句重新激活缺省角色,但该操作会禁用用户仅通过先前启用的非缺省角色而拥有的任何特权。
如果为用户和 PUBLIC 指定了不同的缺省角色,那么用户的缺省角色优先。
为缺省角色定义和授予特权: - 使用 CREATE ROLE 语句在当前数据库中创建一个新角色。
- 使用 GRANT 语句将特权授予该角色。
- 使用以下语法将角色授予一个用户,并将该角色设置为缺省用户或 PUBLIC 角色:
GRANT DEFAULT ROLE rolename TO username;
GRANT DEFAULT ROLE rolename TO PUBLIC; - 使用 REVOKE DEFAULT ROLE 语句取消缺省角色到用户的关联。
限制: 只有 DBA 或数据库所有者才能移除该缺省角色。 - 使用 SET ROLE DEFAULT 语句将当前角色复位为缺省角色。
内置角色
出于安全原因,GBase 8s 支持内置角色,这些角色对于被授予该角色且连接到数据库的任何用户都生效,而与任何其他角色是否也处于活动状态无关。例如,在 IFX_EXTEND_ROLE 配置参数设置为 ON 的数据库中,只有数据库服务器管理员(DBSA)或 DBSA 已授予内置 EXTEND 角色的用户才可以创建或删除使用 EXTERNAL 关键字定义的 UDR 。同样,在实现 LBAC 安全策略的数据库中,DBSA 可以授予内置 DBSECADM 角色。该角色的被授予者成为数据库安全管理员,可以定义并实现 LBAC 安全策略并可以为数据和用户指定安全标签。与用户定义的角色不同,内置角色无法被 DROP ROLE 语句删除。SET ROLE 语句对内置角色无效,因为在用户连接到它们已被授予内置角色的数据库期间,该角色始终处于活动状态。有关定义和操纵角色的外部例程引用段或 SQL 语句的更多信息,请参阅《GBase 8s SQL 指南:语法》。有关定义和操纵 LBAC 安全对象的 DBSECADM 角色或 SQL 语句的更多信息,请参阅 《GBase 8s 安全指南》。有关缺省角色的更多信息,请参阅《GBase 8s 管理员指南》。
2.2.2 集中管理
许多人使用的数据库都很有价值,必须将它们作为重要的企业资源来保护。当编译由价值数据的存储并同时允许许多职员访问这些数据时,会产生严重问题。通过在维护性能时保护数据来解决此问题,数据库服务器允许您将这些任务集中。必须保护数据库,以免数据库丢失或遭到破坏。很多情况都可以对数据库构成威胁:软件和硬件故障以及火灾、水灾和其它自然灾害。丢失重要的数据库可能会带来巨大的破坏。破坏可能不仅包括重新创建丢失数据的支出和困难,而且包括数据库用户的生产时间损失以及用户不能工作时失去的业务和信誉。定期备份的计划可能帮助避免或减轻这些可能的灾难。必须维护和调整许多人使用的大型数据库。必须有人监视系统资源的使用状况、列出其增长图表、预计瓶颈并计划数据库的扩展。用户将报告应用程序中的问题;必须有人诊断这些问题并更正它们。如果快速响应很重要,那么必须有人分析系统的性能并找出响应慢原因。
2.3 重要的数据库术语
在开始下一章之前应该了解一些术语。根据您使用的数据库服务器,不同的术语组描述相应的数据库和数据模型。
2.3.1 关系数据库模型
使用 GBase 8s 数据库服务器厂家的数据库是对象关系数据库。在实际应用的术语中,这意味着所有数据库都以具有行和列的表的格式显示。其中具有以下简单的对应关系:
关系描述
table = entity
一个表不是数据库对某一主题或一类事务已知的全部内容。
column = attribute
一列表示一个特征、特性或表主题适用的事实。
row = instance
一行表示表主题的个别实例。对于如何选择实体和属性有一些规则,但仅当您设计数据库时这些规则才显得重要。已经设置现有数据库中的数据模型。要使用数据库,只需要知道表和列的名称以及表和列如何与现实对应。
2.3.2 表
数据库是分组为一个或多个表的信息集合。表是组织为行和列的数据项的数组。每个 GBase8s 数据库服务器产品中都提供了演示数据库表表示数据库管理员(DBA)想要存储的有关实体(数据库描述的某类型事物)的全部内容。示例表 stock 表示 DBA 想要存储的有关体育用品商店的全部内容。演示数据库中的其他表表示诸如 customer 和 orders 之类的实体。
2.3.3 列
表的每一列包含一个属性,它就是一个特性、特征或描述表的主题的事实。stock 表具有有关商品的下列事实的列:库存编号、制造商代码、描述、价格和计量单位。
2.3.4 行
表的每一行就是表主题的一个实例,就是实体的一个特定示例,stock 表的每一行表示体育用品商店销售的一种商品。
2.3.5 视图
视图是基于指定的 SELECT 语句的虚拟表。视图是数据库中内容的动态控制图片,它允许程序员确定用户查看额处理哪些信息。可为不同用户提供数据库内容的不同视图,还可使用若干种方法限制它们对那些内容的访问。
2.3.6 序列
序列是数据库对象,它生成已定义范围内的整个数字序列。数字序列可以按升序或降序运行,并且是单调的。有关序列的更多信息,请参阅《GBase 8s SQL 指南:语法》。
2.3.7 针对表的操作
因为数据库实际上是表的集合,使用数据库操作就是对表的操作。对象关系模型支持三种基本操作:选择、投影和连接。下图描述了选择和投影操作(在后面的章节中详细定义了这三种操作,并提供了许多示例。)
图: 选择和投影的说明
当从表选择数据时,您就选择了某些行而忽略其他行。例如:您可以通过要求数据库管理系统“选择制造商代码为 HSK 并且单价在 200.00 和 300.00 之间的所有行”来查 询 stock 表。当从表中进行投影时,您就选择了某些列而忽略其他列。例如:您可以通过要求数据库管理系统“投影 stock_num 、unit_descr 和 unit_price列”来查询 stock 表。表只包含有关一个实体的信息;当想要有关多个实体的信息时,就必须连接它们的表。可使用多种方法来连接表。有关连接操作的更多信息,请参阅编写高级 SELECT 语句。
2.3.8 对象关系模型
GBase 8s 允许您构建对象关系数据库。除了支持字母数字数据(如字符串、整型、日期和小数)之外,对象关系数据库还扩展了关系模型的功能,使它具有以下面向对象的功能:
可扩展性
可以通过定义新数据类型(以及支持它们的访问方法和函数)和用户定义的例程(UDR、允许您存储和管理图像、音频、视频和大型文本文档等等)来扩展数据库服务器的功能。GBase 及第三方供应商将某些数据类型和访问方法封装到 DataBlade 模块或共享类库中,可根据您的需要,将它们添加到数据库服务器中。DataBlade 模块使您能够存储费传统数据类型(如两维空间对象:线、多边形、椭圆和圆)并通过 R-tree 索引访问它DataBlade 模块还可能提供对大型文本文档的新访问类型,包括词组匹配、模糊搜索和同义词匹配。还可以使用允许您添加数据类型和访问方法的 GBase 8s 的功能来自己扩展数据库服务器。有关更多信息,请参阅《GBase 8s 用户定义的例程和数据类型开发者指南》 。可以使用 SPL 和 C 编程语言来创建 UDR ,以便封装应用程序逻辑或增强 GBase8s 的功能。有关更多信息,请参阅创建和使用 SPL 例程。
复杂类型
可以定义包含一个或多个现有数据类型的新数据类型。复杂类型在组织列和表级别的数据方面允许更大的灵活性。例如:使用复杂类型,您可以定义包含单个类型的值集合的列和包含多个组件类型的列。
继承
可以定义获取其它对象的属性的对象(类型和表)并添加特定于所定义对象的新属性。GBase 8s 提供对象的面向对象的功能优于关系模型的功能,但以具有行和列的表的形式表示所有数据。虽然对象关系模型扩展了关系模型的功能,但您可以将数据模型作为传统关系数据库实现(如果您选择这样做的话)。对于如何选择实体和属性的规则仅在您设计新的数据库时才显得非常重要。
2.4 结构化查询语言
大多数计算机软件还做不到以文字方式询问数据库“New Jersey 的客户下了哪些装运日期在第三季度的订单?”。您还必须使用软件能够容易分析的限制语法来表述问题。可以使用以下术语对演示数据库提出相同问题:
SELECT * FROM customer, orders
WHERE customer.customer_num = orders.customer_num
AND customer.state = ‘NJ’
AND orders.ship_date
BETWEEN DATE(‘7/1/98’) AND DATE(‘9/30/98’);
此问题是“结构化查询语言(SQL)”的一个样本。您将使用这种语言来发出对数据库的所有操作。SQL 由语句组成,每个语句都以指定函数的一个或两个关键字开头。SQL的 GBase 8s 实现包含从 ALLOCATE DESCRIPTOR 到 WHENEVER 的大量 SQL 语句。仅当设置或调整数据库时才将使用大多数语句。通常将使用三个或四个语句来查询或更新数据库。有关 SQL 语句的详细信息,请参阅《GBase 8s SQL 指南:语法》 。最经常使用的语句是 SELECT 语句。SELECT 是唯一可用来从数据库检索数据的语句。它还是最复杂的语句,本书中的后面两章将讨论它的许多用法。
2.4.1 标准 SQL
由于性能或竞争优势等原因,或者为了利用本地硬件或软件功能,每个 SQL 实现都与其它实现以及 GBase 版本的语言有些小的区别。为了确保这些差异不会增大,在二十世纪八十年早期成立了标准委员会。由美国国家标准学会(ANSI)资助的委员会 X3H2 在 1986 年发布了 SQL1 标准。此标准定义了一组核心的 SQL 功能和诸如 SELECT 等语句的语法。
2.4.2 GBase 8s SQL 和 ANSI SQL
SQL 的 GBase 8s 实现与标准 SQL 兼容。GBase 8s SQL 还与 GBase 版本的语言兼容。然而,GBase 8s SQL 包含对标准的扩展;即,某些语句的额外选项或功能及其他语句的更宽松的规则,大多数差异出现在不经常使用的语句中。例如:在 SELECT 语句方面很少出现差异,该语句占 SQL 使用率的 90%。GBase 8s SQL 和 ANSI 标准之间的一个差异是,标识为对 SQL 的 ANSI 标准的扩展。
2.4.3 交互式 SQL
要实施本书中的示例以尝试 SQL 和数据库设计,您需要一个允许您以交互方式执行 SQL语句的程序。DB-Access 就是一个这样的程序。它帮助您编写 SQL 语句,然后将 SQL 语句传递至数据库服务器以供执行,并向您显示结果。
2.4.4 一般编程
可用编写合并 SQL 语句并与数据库服务器交换数据的程序。即,可以编写从数据库中检索数据并对选择的任何内容进行格式化的程序。还可以编写从任何格式的任何源中取出数据。准备数据并将数据插入到数据库中的程序。还可以编写称为存储例程的程序来使用数据库数据和对象。编写的存储例程直接存储在数据库中的表中。然后,可以从 DB-Access 或 SQL 应用编程接口(API,例如 GBase 8sESQL/C)执行存储例程。SQL 编程和通过 SQL 程序修改数据提供了如何在程序中使用 SQL 的概述。
2.4.5 符合 ANSI 的数据库
当创建数据库时使用 MODE ANSI 关键字来将数据库指定为符合 ANSI 。在此类数据库中,ANSI/ISO 标准的某些特性适用。例如:修改数据的所有操作在事务中自动发生。这意味着更改要么作为一个整体进行,要么根本就不进行。在 GBase 8s SQL 指南:语法 中的语句描述中。在适当的位置说明了符合 ANSI 的数据库在行为方面的差异。
2.4.6 Global Language Support
GBase 8s 数据库服务器产品提供了 Global Language Support (GLS)功能部件。除了 U.S. ASCII 英语之外,GLS 允许您在其它语言环境中工作并在 SQL 数据和标识中使用非ASCII 字符。可以使用 GLS 功能来与特定语言环境定制保持一致。语言环境文件包括特定于文化的信息。如货币和日期格式以及整理顺序。
2.5 总结
数据库包含一系列相关信息,但与存储数据的其他方法在基本方式上有所不同。数据库不仅包含数据,还包含数据模型,数据模型定义每个数据项并指定数据项相对于其他项和现实世界的意义。多个用户可同时访问和修改数据库。每个用户具有数据库内容的不同视图,并且可使用若干方法限制每个用户对那些内容的访问。
关系数据库由表组成,而表由列和行组成。关系模型支持对表的三种基本操作:选择、投影和连接。对象关系数据库扩展了关系数据库的功能。可定义新的数据类型来存储和管理音频、视频和大型文本文档等等。可以定义组合一个或多个现有数据类型的复杂类型,为在列和表中组织数据提供了更大的灵活性。可以定义继承其它数据库对象的属性的类型和表并添加特定于所定义对象的新属性。
要使用和查询数据库,使用 SQL 。ANSI 对 SQL 进行了标准化。您可用于提高性能的一些 GBase 8s 扩展补充了 ANSI 定义的语言。GBase 8s 工具还是得有可能与 ANSI 标准严格保持一致。软件的两层结构将您的所有工作与数据库联系起来。底层总是执行 SQL 语句并管理磁盘 和计算机内存中的数据的数据库服务器。上层是许多应用程序(有些来自 GBase ,有些由您、其他供应商或您的同事编写)之一。中间件是将数据库服务器与应用程序进行链接的组件,由数据库供应商提供来将客户机程序与数据库服务器绑定在一起。GBase 8s 存储过程语言(SPL)就是此类工具的一个示例。