数据库基础
基本知识与关系模型:
数据库主要就是用来存储数据的软件系统
我们将现实世界中的数据通过抽象建模,然后存储到数据库中,通过表的关系模型(粗略理解就是表项)来描述一个事物,数据库使用者可以通过数据库语言对于数据库中的数据进行查询
数据库构成:数据的集合称为数据库,我们需要通过数据库管理软件来创建,操作数据库,不同的数据库管理软件对于数据库的存储方式,索引方式等等可能都是不同的,但是只要他们都遵守某一种数据库语言,然后通过后端的不同实现,让自己的数据库遵守这门语言的语法,数据的使用者就可以方便的使用了,不同的使用者通过不同的数据库应用程序来操作数据库
关系型数据库主要就是将一张一张的表作为存储数据的模式,所以表又称为关系,使用这种存储模式的数据库也叫关系型数据库
表的组成:一张表通过表名,表格式,表内容三部分组成;其中表名和表标题表明了这张表用来存储的数据是什么,且每个值有什么意义,所以这两项称为关系模式;行称为元组;列称为字段,属性
数据库就是将一张张有关系的表组织起来的集合
什么是数据库系统:
数据库构成:数据的集合称为数据库,我们需要通过数据库管理软件来创建,操作数据库,不同的数据库管理软件对于数据库的存储方式,索引方式等等可能都是不同的,但是只要他们都遵守某一种数据库语言,然后通过后端的不同实现,让自己的数据库遵守这门语言的语法,数据的使用者就可以方便的使用了,不同的使用者通过不同的数据库应用程序来操作数据库
在这里我们就可以清楚的看出,对于数据库的不同部分的具体描述,可以结合上述理解
什么是数据库管理系统:
从用户视角看,用户需要DBMS进行数据的整理,需要创建数据库,创建关系,对于关系的格式进行定义,所以数据库需要有这些功能,DBMS需要给用户提供DDL,也就是对于数据库的定义
当我们使用数据库时,需要对数据的数据进行增删改查等操作,所以我们需要一门数据库操作语言对于数据库内各种数据进行操作
对于数据库管理员来说,需要对于不同用户的不同增删改查进行限制,所有需要一门数据库的控制语言
数据库语言也就是对于上述的三种语言的组合,对于数据库语言有一些统一的标准,例如sql语言,不同的数据库管理系统通过底层实现相同的sql语法实现虽然数据库管理系统的底层逻辑可能不一样,但是通过封装实现相同的查询功能
sql语言可以对于高级语言进行嵌入,这样就可以满足用户的查询操作了
我们再来看看一个dbms需要那些部分
对于不同的语言需要有不同的编译器,对于数据库管理语言需要转化为基础的关系演算操作,再由查询引擎来完成各种各样的关系演算完成查询功能
一个数据库系统包含很多次序,通过不同程序之间的协作完成各种功能
数据库系统的结构抽象与演变:
数据库结构
一个数据库系统就相当于通过不同的软件不同的人员可以对于DBMS进行操作,从而对于数据库进行操作
对于数据库系统,分为三个层次,外层次,也就是用户层次,提供通过不同的软件实现,看到数据的一部分,也就是使用DCL进行了限制;概念层次,也就是全局层次,可以通过DBMS进行操作,可以看到数据库的所有数据;内层次,可以看到数据库的组织形式,以什么样的存储方式来存储的
数据的模式也就是之前说的表的模式,包括表名和表的标题;视图也就是不同层次看到的数据
对于不同层次,看到的关系模式可能时不同的,所有就展现了不同的视图,对于不同的应用程序,可能用户看到的数据显示在一块,但是可能跨越了多张表的查询操作,对于不同的应用程序这样的查询操作可能不同,也就展现了不同的视图
两层映像:ec映像关系的时全局模式和外模式,可能全局模式的组织结构修改了,如果没有ec映像,可能应用程序端就要进行大规模的代码修改,但是因为加入了ec映像的关系,可能只需要修改ec映像的映射关系就可以使应用程序端代码无需修改。而ci映像也就是数据库从物理存储到全局展示之间的联系
对于不同层次的模式修改,可以通过改变映射来实现对于上层的数据的不变性
数据模型
我们之前已经讲过了关系模式,关系模式也就是在关系型数据库中的组织显示包括了表名和表标题;而这里的数据模型也就决定了数据结构,不同数据模型有不同的操作和约束关系,例如关系模型中,有对于数据的增删改查这些基本操作,同时对于某一列,可以定义主键约束,这样这一列的数据就是不可重复的了
对于树结构,可以通过不同的指针的指向不同的数据,将各种数据串联起来
数据库系统的演变:
原来人们之间使用操作系统的文件来实现不同的数据存储,但是也存在各种各样的问题,例如因为没有映射,如果数据库修改所有的程序都要进行修改
数据库的出现通过数据库对于操作系统的操作,实现物理存储的组织,然后通过和用户的交互实现数据查询
数据库中主要的数据库就是关系数据库
关系数据库存在第一范式,也就是数据按行列组织,对于关系数据库将sql语言转化为各种关系运算实现不同的功能
对于一般的关系数据库的遵守第一范式的原因,导致不同的行列不可再分,也就导致了不能出现上述情况,但是随着面向对象的发展,便出现了面向对象数据库,可以根据数据的可分的性质,分为列下面的子列等等
不同的数据库关系系统通过遵守odbc的规则完成,在java中也成为jdbc