设为首页 加入收藏

TOP

T-SQL基础教程:关系模型(一)
2014-11-24 01:39:14 来源: 作者: 【 】 浏览:15
Tags:T-SQL 基础 教程 关系 模型

关系模型是基于集合理论和谓词逻辑进行数据管理和操作的语义模型。如上所述,它是由Edgar F. Codd博士创建的,后来由Chris Date、Hugh Darwen等阐释和发展。关系模型的第一个版本是于1969年由Codd在IBM研究报告“Derivability, Redundancy, and Consistency of Relations Stored inLarge Data Banks(大型数据库中关系模型存储的可导、冗余和一致性)”中提出的,修订版本是由Codd于1970年在一篇名为“A Relational Model of Datafor Large Shared Data Banks(大型共享数据库的数据关系模型)”的文章中提出的,发表在《美国计算机学会通讯》杂志上。

关系模型的目标是确保数据的一致性表示,最小化或是没有冗余且不牺牲完整性,并将定义数据的完整性(强制数据一致性)作为模型的一部分。RDBMS应假定实施关系模型并提供方法来存储、管理、实施完整性和查询数据。关系模型基于强壮的数学基础的事实,意味着提供了一个可靠的数据模型实例(在后面将建立一个物理数据库)。可以肯定地说,当某个设计存在缺陷时不应当是靠直觉。

关系模型涉及命题、谓词、关系,元组和属性等概念。对于非数学家,这些概念可能非常吓人。下面几节将以一种通俗的、非数学的方式讨论模型中的一些关键方面,并解释它们如何与数据库进行关联。

1.命题、谓词和关系

普遍认为“关系”术语源于表之间的关系,这是不正确的。“关系”实际上是数学术语的关系。在集合理论中,关系是集合的表现形式。在关系模型中,关系是相关的信息的集合,与SQL中相对应的就是一个表——尽管不能完全对应。关系模型中的一个关键点是,单个的关系应代表一个单个集合(如客户)。值得注意的是,对多个关系操作(基于关系代数)的结果会是一个关系(例如,两个关系之间的联接)。

注意:关系模型分为关系和关系变量,但为了让事情简单,我不想引入这种区分;相反,我会使用两种情况阐述关系。此外,关系是由表头和主体组成。表头包含一组属性(SQL中称之为列),其中每个元素由一个属性名称和类型名称标识。主体包含一个元组(SQL中称之为行)集合,其中每个元素都由键标识。为了让事情简单,我会将表称之为行集。

当为数据库设计数据模型时,要使用关系(表)来表示所有数据。你首先要确定需要在数据库中表示的命题。命题应当是一个断言或必须为“真”或“假”的语句。例如,语句“雇员Itzik Ben- Gan出生于1971年2月12日,在IT部门工作”是一个命题,如果这是一个真命题,它将表现为Employees(雇员)表中的一个行,如果是假命题则根本不会出现。这个假设被称为“封闭世界假设”(close world assumption,CWA)。

下一步是将命题形式化。为此,你要取出实际数据(关系的主体)并定义结构(关系的表头)——例如,创建命题的谓词。你可以以参数化命题方式思考谓词,关系的表头包含一个属性集合。注意术语“集合”的使用,在关系模型中属性是无序且互异的。属性由属性名称和类型名称进行标识,例如,一个Employees(雇员)关系的表头可能包含下列属性(属性名称和类型名称以成对方式出现):employeeid 整型、firstname 字符串型、lastname字符串型、birthdate 日期型、departmentid整型。

类型是关系最基本的构造块,它约束了属性是一个可能或有效值的确定集合。例如,INT类型是范围自–2,147,483,648至2,147,483,647所有整数的集合。类型是数据库中谓词的最简单形式之一,因为它限制了该属性的允许值。例如,数据库不会接受一个雇员的出生日期为1971年2月31日的命题(更不用提像“abc”这样的生日)。注意,类型不受像整型或字符串型等基本类型的限制,它也可以是可能值的枚举,例如枚举可能的工作岗位。类型是非常复杂的,或许最好方法将类型看作是一个类——封装了支持它的数据和属性。一个复杂类型的示例是:一个支持多边形的几何形状类型。

2.缺失值

关系模型的一个方面是对于“是否谓词应限制于二值逻辑”的激情辩论。也就是说,在二值谓词逻辑中谓词是“真”或“假”。如果谓词不是“真”,那肯定是“假”。二值谓词逻辑的使用遵循了一个名为“排中律”的数学定律。不过,也有人说具有三值(甚至四值)谓词逻辑空间,思考一下像缺失值的账号情况。一个谓词,涉及到缺失值则导致既不是“真”也不是“假”——它是未知的。例如,一个Employees(雇员)关系的手机属性,假设某些雇员的手机号码丢失了,你怎么把这一事实表示数据库中?这要使用三值逻辑实现,手机属性应当允许有一个代表缺失值的特定标记。然后,这种缺失值情况下,将该手机属性与一些指定数字比较,谓词也将产生未知。三值谓词逻辑是指来自谓词结果的三种可能逻辑值──“真”、“假”和“未知”(true、false和unknown)。

有些人认为三值谓词逻辑是非关系的,而有些人认为这是关系。Codd实际上主张四值谓词逻辑,提出缺失值有两种不同情况:缺失但可用(A-Mark)和缺失但不可用(I-Mark)。例如,“缺失但可用”是雇员拥有手机,但是你不知道是什么号码;“缺失但不可用”是雇员根本就没有手机。根据Codd的主张,应当有两个特定标记来支持这两种缺失值情况。SQL通过支持NULL标记实现了三值谓词逻辑,以表示缺失值的通用概念。SQL中对NULL和三值谓词逻辑的支持是造成极大混乱和复杂性的根源,尽管人们认为缺少的值是现实的一部分。此外,另一个选择是仅使用二值谓词逻辑,这是不会造成问题的。

3.约束

关系模型的最大好处是能够把定义数据的完整性作为模型的一部分。数据完整性通过在数据模型中定义的约束规则实现,并由RDBMS实施。实施完整性的最简单方式是指定属性类型的nullability(是否支持或不支持NULL标记)标志。约束也可以通过模型自身实施,例如,关系Orders(orderid, orderdate, duedate,shipdate) 中每笔订单有3个互异日期,而关系Employees(empid) EmployeeChildren(empid,childname)允许每个雇员有0至可数的无穷个子级。

约束的其他例子还包括提供实体完整性的候选键和提供引用完整性的外键。候选键是定义了一个或多个属性的键,防止关系中出现多个相同的元组(SQL中的行),基于候选键的谓词可以唯一地标识行(如雇员)。你可以在关系中定义多个候选键,例如,在Employees关系中,可以在employeeidSSN(社会安全号码)等属性上定义候选键。通常,你可以任意选择一个候选键作为主键(例如,Employees关系中的employeeid),并作为标识行的首选方式。所有其他候选键称为备用键。

外键用于强制引用完整性。外键定义了关系的一个或多个属性(称为引用关系)引用另一个关系(或同一关系)的候选键,此约束限定了引用关系的外键属性中的值,应是出现在被引用关系(父表)的候选键属性中的值。例如,假设Employees关系具有一个定义在departmentid属性上的外键,它引用Departments关系中的主键属性depa

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇查看sql语句的执行时间 下一篇数据库错误[DBNETLIB][Connection..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: