您的位置:首页 > 其它

关系代数的历史与第一范式1NF

2014-06-23 15:14 260 查看
关系数据库的诞生和历史

最开始没有数据库,数据直接写到程序里面,物理配置过低,没有数据库概念的需要;

物理配置提高,程序中写数据就非常臃肿,代码缺乏可读性,将数据写到操作系统的文件中,程序通过调用API来调用和使用文件的数据;

调用的接口标准化和规范化后,就成为数据库,从数学模型可以看出数据库分的几个类型:

层次状存放模型,缺陷是同一个元素同时属于两个实体,层次模型就很难处理;

网状数据库,一个人员可以同时属于两个部门,但无论存储方式和查询方式都很难使用;

在70年代初,关系型数据库之父,E.F.Codd ,先在IBM内部发表了一个论文,公司不太重视;

1970年Codd划时代的沦为《用于大型共享数据库的关系数据模型》,用简单的方式解决了数据库建模的问题

严格讲,不是数据库论文,是数学论文,

关系是很多行的集合,行又叫记录,有叫记录的集合;

列又叫列,又叫属性,每个记录都必须先定义好属性,叫结构化;但很难结构化的数据,有困难;

有了关系,就可以进行关系代数,集合运算符:并集、差集、交集、笛卡尔积

比较运算符:大于,小于,等于

专门的关系运算符:选择,投影,连接,除

关系运算的结果,还是关系,使用关系表达式表达

Codd是一个数学家,原来是英国,到美国,到IBM公司,作为研究员,本质上是数学家

其他IBM同事看到论文后,觉得可以研究出商业数据库;其中同事Don Chamberlin将关系代数翻译成一种计算机语言,后来被世界接受,成为SQL;最终IBM实现了SQL的想法,就是DB2,但不是第一个商业软件;

第一个软件公司是Oracle,创始时4个人,正式员工只有Bruce Scott,他的猫叫tiger,书写了第一代Oracle数据库代码,以自己的名字作为测试数据库实例,三个老板讨好员工,后来太累,就辞职了,卖了股票,开了一家Java的新公司。Bob Miner接受Oracle开发工作,Oracle是第一个商业软件,还是Larry Ellison有眼光,看到论文后,直接觉得矿业开发商业软件。从80年代初,到现在三十年,发展成世界第二大软件公司。

关系数据库

基本理论:层次和网络很直观,概念都是很简单。

预备定义 域:域是一组具有相同数据类型的值的集合。

笛卡尔积:给定一组域D1,D2.....,Dn,从每个域中抽取形成向量或数组,后面叫行;

按照排列组合,可以得出不同域的元素的总数: n1*n2*n3

定义:D1*D2*Dn的子集作用在域D1,D2,Dn上的关系,表示为R(D1,D2,Dn)

这里R表示关系的名字——表名,n是关系的目或度——列数。

关系中的每个元素是关系中的元组——行、记录。

单元关系就是只有一列的表;二元关系就是只有两列的表;

关系就是所有的一切都可以用关系,二维表来表示出来,把查询演变成关系的计算;

由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性;n目关系必有n个属性;

属性就是列名;

记住几个示例表:

学生表 S(S#,SN,SD,SA)

课程表 C(C#,CN,PC#)

学生-课程表 SC(S#,C#,G)

候选键就是该列固定后,整行就可以确定下来;候选码的本质上是唯一性约束,学号可以,姓名不可以

表的候选码是有具体的语义环境有关,与现有关系中的数据无关;

但目前给出的候选码不太精确,学号+姓名成为候选码,不太好;

若一个关系有多个候选码,则选定其中一个为主码,又叫主键primary key。学号成为码,***号也可以成为码。

物理排布原来是按照主键进行存储和访问,也可以被其他表进行参照;需在表中设计primary key;

主码的主属性,则成为主属性;

不包含在任何候选码中的属性称为非主属性;表中的列分成两类。

对关系再附加一些其他属性:

1.列是同质的,每一列中的分量是同一类型的数据,来自同一个域;

2.不同的列可出自同一个域,称其中每一个列为一个属性,不同的属性药给予不同的属性名;

3.列的顺序无所谓,即列的次序可以任意交换;

4.任意两个元祖不能完全相同;任意行不能重复;

5.行的顺序也是无所谓,即行的次序可以任意交换,rownum与物理记录顺序无关;

6.分量必须取原子值,即每一个分量都必须是不可分的数据项;

凡是满足上面六个关系的关系,就叫第一范式,写作1NF;

根据条件4,可以得出第一范式必有主键;至少会有全码;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: