这一周,你会了解什么是数据库,以及数据库的不同类型。接着,你将从Python3内置的SQLite着手,学习如何使用数据库。

然后,你要用SQL语言CRUD(create, retrieve, update, delete) SQLite。

接着,你要把API返回的数据储存到数据库中。

最后,把这些MVP组合起来,你就能在Web端接受用户输入,更新SQLite里的数据(比如允许用户更正数据库中某一城市的天气情况)。

接下来我们了解一下数据库的基础知识。

初探数据库

在了解数据库之前,我们先探索三个问题。

一、为什么要使用数据库存储数据(而不是文件)

这个问题非常有趣,我们需要通过实例来理解,假设我们现在成立了一个公司,要录入员工信息,通常的文件(比如excel表格,json文件)的办法是这样的:

员工姓名 负责区域 所属部门 部门主管 联系方式 工作时间
孙悟空 花果山 武装部 太上老君 紧箍咒 0:00~24:00

问题是,如果我想知道「花果山」还有哪些人负责,就要用复杂的方法重新组合这张表格(可能有好几步操作)。但数据库的方法是怎样的?数据库一般会创建很多个数据库表。比如:

A. 员工表

员工工号 姓名 电话 所属部门ID
S1 唐僧 42 D1

B. 分公司表

分公司ID 公司名 分公司领导 地址
C1 高老庄催婚有限公司 老高 高老庄

C. 部门表

部门ID 部门名称 部门领导 所属分公司的ID
D1 Python取经打怪填坑部 唐僧 C1

由此可见,数据库中数据表的格式更加简单,员工表全是员工,分公司表全是分公司,同时还有附加项目说明员工属于哪个部门。这就使得查询、更改、增加数据变得异常简单:假如我要把猪八戒调动到「盘丝洞分公司」,我只需要变更猪八戒的分公司ID假设我要增加「沙悟净」同事,在员工表里添加就好了。

这些操作在文件里面都是非常复杂的,而且不能理清彼此的关系。再举个现实点的例子,日本便利店的成功有一个原因是单品管理的实施:每个便利店的销售数据都会并到总公司的数据库。总公司的数据库管理人员,可以通过数据很快分析出「北京朝阳区」拖鞋(单品)销量增加很快,再一看新闻「朝阳区某大厦顶楼游泳池漏水,大厦内办公人员穿拖鞋上班」。于是他将这个事情反映给Boss,Boss立马从「朝阳周边地区调了1000双拖鞋到大厦旁边的三家便利店」。

二、数据库和数据库管理系统的关系是什么?

想象你有一个书架,书是数据库,整个书架是数据库管理系统。

DBMS(数据库管理系统Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管理员也通过DBMS进行数据库的维护工作。它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立、修改和访问数据库。DBMS提供数据定义语言DDL(Data Definition Language)与数据操作语言DML(Data Manipulation Language)供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。

三、什么是关系型数据库。

RDBMS:关系型数据库管理系统(Relational Database Management System)的概念更简单,就是在数据库管理系统的基础上增加关系。它通过数据、关系和对数据的约束三者组成的数据模型来存放和管理数据。

从20世纪80年代开始,数据库技术就进入了关系数据库时代。而数据库经历了网状数据库、层次数据库和关系数据库三个时代,我们现在接触到的基本上都是关系型数据库,而Microsoft SQL Server、MySQL、Oracle、DB2等也只是关系数据库中的一种。

四、什么是NoSQL?

NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。

2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。

2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false;"。因此,对NoSQL最普遍的解释是“非关联型的”,强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS。

Facebook使用的Apache Cassandra就是NoSQL(非关系型数据库),具有高度可扩展性。

results matching ""

    No results matching ""