How to Database
关于数据库知识的回顾
在上个学期,学习Javase的时候,写了一个影碟租赁系统,其中链接到了sqlite这款十分简洁的开源数据库
Sqlite介绍:sqlite是一款开源免费的数据库管理系统,它的最大特点就是他是一个嵌入式数据库,它的数据文件和数据库管理软件可以放在一个文件夹下,并且十分轻量级,只有几Mb的大小。基本上大多数的Android app和游览器都是使用的这款数据库
在此之后接触的主要是mysql,但是只写了一个库,一个表,一条数据(没错,就是我的登录功能。。。)。我甚至连sql语句都没有写过,主要是通过了navicat这款图形化操作数据库的软件完成对数据库的各种操作。
我们 详细解读的书是最负盛名的数据库系统概念(Database System Concepts Sixth Edition),它也是众多dba在工作中都会翻阅的书籍
引言——超级无聊的定义和莫名其妙的名词:
既然老师讲了了6节课,那么我们不妨关注一下
数据视图:
数据库系统提供给用户数据的抽象视图,而隐藏了关于数据存储和维护的某些细节。就是怕小白用户看不懂,所以提供傻瓜的视图和接口
>数据库在数据抽象上的分层(理解了之后不知道有什么卵用,除了考试)
- 物理层:底层数据的存储
- 逻辑层:描述数据库中存储了什么数据,以及它们之间的关系。DBA使用抽象的逻辑层。言而总之,你学的sql语句知识基本在逻辑层
- 视图层(用户层):很多用户操作的,比逻辑层高。书上的例子:大学注册办公室的职员看到的学生信息表…
>数据库模式:数据库的总体设计
- 物理模式-对应物理层
- 逻辑模式-对应逻辑层
- 数据库在视图层可以有几种模式——有时称为子模式(这句话我日吗是真的读不懂),也就是外模式
内模式就好像一个表的设计,外模式/模式映像好像一条sql语句的设计,外模式(子模式)就是查出来的数据,不同的sql查出不同的数据,所以外模式有任意多个。应用程序也是通过外模式查出的的数据来工作。这是我的理解
但是个人感觉这内外模式什么的定义,有什么卵用吗?咬文嚼字,毫无意思,浪费老子时间
>数据模型
提供了描述物理层和逻辑层以及视图层设计的方式
- 关系模型:Mysql神马的基本数据库现在基本都是,当然还有网状模型神马的,网状模型暂不接触,待填
- 半结构化数据模型:XML标记语句,就是一种
- 实体-联系模型:entity-relationship model,就是E-R模型,常见于数据库设计
- 基于对象的数据模型:详见于c++和Java或C#
>数据库语言
- 数据库操作语言DML (data-manipulattion language):操作数据CRUD,select * from。。。Where 。。。
- 数据定义语言DDL(data-definition language):emmmm…就是创建数据库用的语句,就像create table department(a interge,b varchar(20));
关系模型介绍
> key 码或者键
- 超码,能单一判断元祖的单个码或者几个码的组合
- 候选码,超码的简洁版,最少的码的组合就能单一判断元祖,不为空
- 主码,被我们选中的候选码,不为空
- 外码,一定是另一个的表的主码
关系型数据库的初探——Mysql
首先我们装上一个navicat,然后操作一波,边操作边学习。但是在Linux下的navicat是没有破解版的,所以有以下替代工具:phpmyadmin,一款开源的web操作数据库的工具,但是需要php和apache的配置,没有写过php或者没有php环境的同学很难操作这款工具,所以我重点推荐下面这个:来自jetbrains的DataGrip
DataGrip真的是难啊,折腾两晚了没弄懂,真的好恨Linux啊,用navicat简直无学习成本嘛
首先需要新建一个数据库链接,并且下载数据库驱动,DG已经帮你做好了,你只需要在提示的地方点击确定
Mysql的localhost3306:数据库进入后有schemas,这相当于Database名称,schemas里面有tables~
关系代数
是在元祖上的运算,分为
- 集合运算符
∪ ∩ × - ÷(一般用在单属性多值要求的筛选,例如同时选择课A和课B的学生编号,R(x,y)÷S(y,z),筛选y列属性或者是组合y属性在S中的值等于R中y的值,且X相等的元组。即是R中y取值=S中y取值并且 这些元祖有相同的x取值)
- 比较运算符
>,≥,<,≤
- 专门的关系运算
σ(select):元组的选择,行选择。注意,在此的select运算相当于sql语句里面的where
Π投影:列选择
- 逻辑运算
老师关于本课程的解答
和小明同学下课后问了杨悦老师一波问题,关于数据库课程安排的问题,在老师的指导下,发现过去对于数据库有以下的不懂:
第一:数据库是一种设计和实现的学问,而不是操作层面的东西,不是说写个sql,弄个navicat创建几张表就算你懂了数据库
第二:数据库的sql语言是先通过优化器,类似于高级语言的编译,之后才执行。那么涉及到两个更底层的东西:关系代数,和b+树模型等数据结构模型(当然它太落后了,现在的数据库基本不用它了,以此举例)
第三:数据库的开发和使用的确很简单,但是最关键的是设计思路,如何把几张关联表的相关列(属性)设计的耦合度更低,使他们在查询时更加有效率,不会出重查或者矛盾错误
Emmm关于考试,实验课程中老师帮我们扛了压力,不要求课堂作业,但是课后会以考试来作为评判依据,那么实验考试的内容主要是sql语句的考察