0x1 数据库基础
1. 文件系统
文件系统访问文件非常简单,重量轻。保存文件并将其下载到文件系统中比在数据库中简单得多。
文件系统的缺点:
1)松散包装。关系映射中没有ACID(原子性,一致性,隔离性,持久性)操作,也即是数据之间没有关联关系。
2)安全性低。
2. 数库的优点
结构化:数据库系统实现了整体数据的结构化,这是数据库的最主要的特征之一。这里所说的“整体”结构化,是指在数据库中的数据不再仅针对某个应用,而是面向全组织;不仅数据内部是结构化,而且整体式结构化,数据之间有联系。
共享性:因为数据是面向整体的,所以数据可以被多个用户、多个应用程序共享使用,可以大大减少数据冗余,节约存储空间,避免数据之间的不相容性与不一致性。
独立性:数据独立性包括数据的物理独立性和逻辑独立性。
物理独立性是指数据在磁盘上的数据库中如何存储是由DBMS管理的,用户程序不需要了解,应用程序要处理的只是数据的逻辑结构,这样一来当数据的物理存储结构改变时,用户的程序不用改变。
逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的,也就是说,数据的逻辑结构改变了,用户程序也可以不改变。
数据由DBMS统一管理和控制:数据库的共享是并发的(concurrency)共享,即多个用户可以同时存取数据库中的数据,甚至可以同时存取数据库中的同一个数据。
3. 关系型数据库与非关系型数据库直观对比
关系型数据库:通过外键关联来建立表与表之间的关系。
一个完整的关系型数据库会由很多的实体表和关系映射表构成。 |
关系型数据库是依据关系模型来创建的数据库。 |
关系模型就是“一对一、一对多、多对多”等关系模型。 |
关系模型就是指二维表格模型(二维表在生活中的应用广泛,例如成绩单、工资表、人员花名册、价格表、物料清单等),因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。 |
关系模型包括数据结构(数据存储的问题,二维表)、操作指令集合(SQL语句)、完整性约束。(表内数据约束、表与表之间的约束)。 |
举例子:
学生: 姓名:张三,性别:男,学号:12345,班级:二年级一班, 班级: 班级:二年级一班,班主任:李四 一个班级可能有多个学生,那么就需要建立一个映射表,将班级表与学生表建立对应关系。 学生表(班级段存储班级表的主键) <——> 班级表(主键:班级) |
非关系型数据库:非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。 |
主要有四种数据存储类型:键值对存储(key-value),文档存储(document store),基于列的数据库(column-oriented),还有就是图形数据库(graph database)。 |
基于列的数据库:
姓名,生日,爱好之间好像使用了ROWID进行连接。 |
键值对存储: |
文档存储:
报纸和杂志包含有文章,如果想在关系型数据库中存储这些文章,首先你需要将这些文章给拆分开来,文章的内容在一个表中,文章的作者以及关于作者的信息要存在另一张表中,对于发布在网络上的文章的评论也需要额外的一张表来存储。
那么对于非关系型书库而言,报纸上的一篇文章可以被存储为一个实例,这样在处理那些总是被查看的数据时可以减少查找的时间。 |
图形数据库:当数据之间是紧密联系的,例如社会关系、科学论文的引文抑或是资本资产定价模型等等,使用图形数据库时最好的选择。
Node-:实体本身,在一个社会关系中可以认为是一个人。 Edge-:实体之间的关系。这个关系可以用一条线来表示,这条线有它自己的属性。这条线可以有方向,箭头可以表明谁是谁的上级。
|
举例子:非关系型数据库中,我们查询一条数据,结果出来一个数组,关系型数据库中,查询一条数据结果是一个对象。
学生: 姓名:张三,性别:男,学号:12345,班级:二年级一班, 班级: 班级:二年级一班,班主任:李四 关系型:查询学生,出来的会是学生姓名,性别,班级等一大堆信息。 非关系型:查询学生,出来的会是姓名,以及各个信息之间关联的ID,比如[张三,4],那么这个4就是与其他信息关联的索引。 |