课程主页:Guoliang Li @ Tsinghua
数据库在计算机系统中的位置
首先,数据库是在设计有大量数据存储需求的软件时必不可少可的基础。
最常见的是:我们通过app或者是浏览器来实现一些特定需求——比如转账、订车票。即引出背后的CS和BS两种网络架构——客户端(client)和服务器(server)以及浏览器(browser)和服务器(server)。因为服务器里装着数据库,所以可以帮我们存储和管理数据,比如说要转账,就会发送一个请求到server服务器,然后交给数据库去处理,最后返回结果给用户(用户面前的浏览器、app)
有很多数据库都是开源的,“开源的”是指数据库的源代码是开放共享的,任何人都可以用开源的数据库源代码通过编译器将人看懂的代码文件编译成机器看得懂的指令,让计算机去做某些事情,比如数据储存和查询——即实现数据库的功能,发挥计算能力(算力);编译器还能实现编译数据库驱动程序实现应用和数据库之间的交互。
在计算机系统中有这么几个成员——非实体的软件(software)比如【最常见的app】、其次是【数据库】、后面是【编译器】、再底层一些是【操作系统(比如Windows)】以及看得见的硬件hardware
其实我们刚刚已经解释了应用和编译器这两个东西和数据库之间的关系。
数据库由什么构成
上面我们所谈论的都是广义的数据库——包含很多,比如数据(data)、数据库(狭义,指数据的集合database即DB)、数据库管理系统(DBMS即一种管理数据的软件)、数据库系统(广泛的概念)。
查询接口层:假设你要开发一款转账的应用,这时候就需要用到数据库驱动程序,驱动程序会实现API接口的功能【API接口是指实现各种软件之间交互的工具】,通过驱动程序可以让转账的应用接入数据库,进行查询、存储等功能。接口可以用Java写成叫JDBC(Java database connectivity),用C语言写成的叫ODBC。
而数据库系统就是包括数据库(DB)、数据库管理系统(DBS)、数据库管理员(DBA)、数据库应用系统,我们上面举的“转账应用”就是数据库应用系统。
数据库里面的数据是什么
如果有用过Excel表格来记录某些东西的伙伴应该会知道生活中有一些数据是可以整理成表格形式来方便记录和查找的。比如转账这个例子,假设有很多用户在同一天都有转入和转出的记录,那么可以类似下面这么记录:
结构化数据:
上面的表格由行和列组成,在数据库中分别被称为“记录”和“属性”(或字段)
注:“记录”也被称为实体或元组;“属性”也被称为字段
这样的数据也被称为关系数据——可以用表格记录起来的数据,也被叫做结构化数据。除了结构化数据还有半结构化和非结构化数据。可以用表存储的数据叫结构化数据,
半结构化数据:
而用图中举例的比如键值对、XML、JSON、图(树状图等)、向量(关于向量后期的博客会涉及再详细解释)等方式存储的数据叫半结构化数据。
键值对是指一对一存储数据,每一个键对应一个值,比如在关系型数据库(表格存储数据——结构化数据)中,键可以指用户名的ID,而值可以指跟这个用户有关的所有信息。
下面是XML(可扩展标记语言)和JSON(JavaScript对象表示法,JavaScript是一种编程语言)
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title lang="en">Harry Potter</title>
<author>J.K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book>
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
{
"name": "John Doe",
"age": 30,
"is_student": false,
"scores": [88, 92, 77],
"address":
{
"street": "21 2nd Street",
"city": "New York",
"state": "NY"
}
}