数据库的学习

data is the power

Posted by xu on March 23, 2018

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 码或者键

  1. 超码,能单一判断元祖的单个码或者几个码的组合
  2. 候选码,超码的简洁版,最少的码的组合就能单一判断元祖,不为空
  3. 主码,被我们选中的候选码,不为空
  4. 外码,一定是另一个的表的主码

关系型数据库的初探——Mysql

首先我们装上一个navicat,然后操作一波,边操作边学习。但是在Linux下的navicat是没有破解版的,所以有以下替代工具:phpmyadmin,一款开源的web操作数据库的工具,但是需要php和apache的配置,没有写过php或者没有php环境的同学很难操作这款工具,所以我重点推荐下面这个:来自jetbrains的DataGrip

DataGrip真的是难啊,折腾两晚了没弄懂,真的好恨Linux啊,用navicat简直无学习成本嘛

首先需要新建一个数据库链接,并且下载数据库驱动,DG已经帮你做好了,你只需要在提示的地方点击确定

Mysql的localhost3306:数据库进入后有schemas,这相当于Database名称,schemas里面有tables~

关系代数

是在元祖上的运算,分为

  1. 集合运算符

∪ ∩ × - ÷(一般用在单属性多值要求的筛选,例如同时选择课A和课B的学生编号,R(x,y)÷S(y,z),筛选y列属性或者是组合y属性在S中的值等于R中y的值,且X相等的元组。即是R中y取值=S中y取值并且 这些元祖有相同的x取值)

  1. 比较运算符

>,≥,<,≤

  1. 专门的关系运算

σ(select):元组的选择,行选择。注意,在此的select运算相当于sql语句里面的where

Π投影:列选择

  1. 逻辑运算

老师关于本课程的解答

和小明同学下课后问了杨悦老师一波问题,关于数据库课程安排的问题,在老师的指导下,发现过去对于数据库有以下的不懂:

第一:数据库是一种设计和实现的学问,而不是操作层面的东西,不是说写个sql,弄个navicat创建几张表就算你懂了数据库

第二:数据库的sql语言是先通过优化器,类似于高级语言的编译,之后才执行。那么涉及到两个更底层的东西:关系代数,和b+树模型等数据结构模型(当然它太落后了,现在的数据库基本不用它了,以此举例)

第三:数据库的开发和使用的确很简单,但是最关键的是设计思路,如何把几张关联表的相关列(属性)设计的耦合度更低,使他们在查询时更加有效率,不会出重查或者矛盾错误

Emmm关于考试,实验课程中老师帮我们扛了压力,不要求课堂作业,但是课后会以考试来作为评判依据,那么实验考试的内容主要是sql语句的考察