数据库 初识
认识
通俗讲, 数据库就是以一定格式进行组织数据的集合 , 直观来看, 数据库就是电脑上一些具有特殊格式的数据文件的集合.
通常谈到数据库会涉及4个基本概念, 即数据, 数据库, 数据管理系统, 数据库系统.
数据
描述世界或者事物的符号记录称为数据. 数字, 文本, 声音, 图像 ... 这些都是数据. 对于计算机来说, 只能处理二进制数据(高低压嘛), 真的很神奇, 0, 1 就能把整个现实世界抽象出来了.
不由感慨< >里说, "道生一, 一生二, 三生万物", 道演变为阴和阳, 阴和阳的组合演变产生世界. 这不就是计算机的原始思想嘛.
我平时工作是数据分析, 处理的基本都是数字, 字符串, 偶尔有图像, 然后就是一通运算...这些就是刻画现实世界的数据呀, 而这些数据背后, 从计算机来看, 都是0和1而已, 没呀了不起. 这也解释了, 数据具有语义性, 就比如100, 可以是成绩, 可以是金钱, 都只是对现实的抽象表达而已, 真的没啥.
文件
从计算机来看, 以硬盘为载体, 将数据进行集中地存储, 其最小的单元, 就是文件, 更一般地, Linux 认为, 一切皆文件, 世界都是由 0, 1演变的, 数字, 文本, 声音, 图像, 程序, 都是以文件为单位进行存储的. 都是一个个地文件而已. 为了方便识别, 才有用不同的文件类型, 后缀加以区别, 如 .exe, .abc, .doc, .sql, .xlsx, .py 等, 本质上, 在linux下都是一样滴.
数据库管理系统DBMS
即是我们平时说的"数据库", 主要包含3类组件, 数据库文件, 数据库服务器, 数据库客户端
数据库文件
- 是真正存放数据的载体. 文件可以在自己主机或其他主机, 通常与服务器一起.
- 是永久存储. 如果硬盘坏了就凉凉了哈.
- 数据有效性高. 是按约定,规则组织数据的, 不论是关系表还是键值对, 数据都有实际意义.
- 读写效率高. 本身就是有"有结构化"的, 读写很快而且对程序调用的支持也好.
数据库服务端
- 管理数据文件. 库表增删, 权限配置等.
- 管理文件数据. 增删查改, 与客户端通过SQL通信.
数据库客户端
- 用户在客户端通过SQL命令实现与服务端通信, 让服务器帮助实现数据的管理.
数据库
有长期维护, 组织可共享的大量数据的集合. 是以特定格式的文件存储数据(特定规则, 增删查改快), 具有较低的冗余度, 较高的数据独立性(高内聚,低耦合)和易扩展性(支持程序调用, 和易维护)的一套系统.
so, 广泛讲, 数据库就是一套数据库系统, 由数据, 数据库管理系统, 应用程序, 管理员共同管理,维护的一个系统. 说的有点牵强, 就想表达,这是从系统论的思维来认识的.
数据模型
数据模型是对现实世界数据特征的抽象. 按不同应用层次可分为概念模型, 逻辑模型, 物理模型.
而数据模型的组成部分是: 数据结构, 数据操作, 数据完整性约束.
数据结构描述了数据元素对象之间的练习, 是对系统静态性的描述. 而数据操作值对象型和实例值所允许的操作集合. 完整性表示数据必须遵守而通用和约束规则.
概念模型也称信息模型 .是按照用户的观点对数据和信息进行建模, 要求要有很强的语义表达, 沟通现实世界和信息世界. 即用我们常用的E-R模型来建模.
- 实体Entity: 客观存在并可互相区别的事务, 抽象的概念或联系. 经典的, 一个学生, 一次选课过程, 学生和学员的关系等..
- 码Key: 唯一表示实体属性. 即平时说的唯一id.
- Entity type: 一类实体即它们所共有的属性, 如 学生(学号, 姓名, 年龄, 身高...)
- Entity type: 同一类型实体的集合. 全体学生, 全部课程...
- Relationship: 实体集之间的联系. 1对1, 1对多, 多对多.
逻辑模型同时面向数据库管理系统和信息世界. 从发展看产生过三种逻辑模型, 层次型, 网状型, 关系型. 层次是树形结构, 网状图是无向图, 关系模型是用二维表结构表示实体之间的关系.
只讲下关系模型, 其建立在严格的数据概念之上, 对应关系如下:
- 关系 -- 表
- 元组 -- 行(记录)
- 码 -- 某个属性组
- 域 -- 一组具有相同数据类型的值的集合
- 分量 -- 元组中的一个属性值(某个字段的值)
- 关系模式 -- 对关系的描述, (属性1, 属性2 ...)
物理模型直接面向计算机系统, 描述数据在系统内部的表示方法和存取方法, 是对数据最底层的抽象, 就是平时写代码前画的表, 字段, 字段类型, 约束这部分, 根据字段, 类型, 约束所建立的一张张二维表, 就是实现了从概念模型->逻辑模型->物理模型的过程.
数据库分类
主要分为关系型和非关系型.
关系型
关系型即我们常见的DBMS, 采用集合代数等概念等概念方法来定义数据, 本质是通过一张二维表来表述关系.
常见的如 SQL_server, Mysql, Oracle, Sqlite ....等, 关系型的关键要素在于:
- 数据行 (一行表示一条记录, 一个样本等)
- 数据列 (字段, 表示一个个的属性)
- 数据表(数据行的集合)
- 数据库(数据表的集合)
像我平时上班会统计一些实体门店的经营数据(房地产), 带看量多少, 认购量多少. 这时候, 我就会先建一个excel文件(数据库), 里面建两个sheet, 分别为带看明细, 认购明细,( 这就是数据表), 对于表来说, 每个字段代表了当前这笔(带看,认购)的属性, 如房源名称, 面积, 客户姓名等), 这就是数据列, 这样的多行, 多列, 就完整地表现了整个的经营数据, 及对应的关系.
对数据库, 这里说客户端来说, 主要是通过SQL命令的方式来与服务端通信的. SQL(Structured Query Language)是结构化查询语句, 用来操作RDBMS. SQL语句主要分为: (SQL 不区分大小写哦.)
- DQL: 数据查询语言, 用于对数据进行查询, 如select ....
- DML: 数据操纵语言, 对数据进行增删改, 如insert, delete, update..
- TPL: 事务处理语言, 包括begin transaction, commit, rollback ...
- DCL: 数据控制语言, 权限管理, grant, revoke ...
- DDL: 数据定义语言, 增删库表, create, drop...
非关系型
主要分为, 键值对型(哈希表),如 redis; 列存储型(分布式, 如Hbase, 面向列) , 文档型, 如MongoD(其实也是键值对方式), 图形化数据库等, (还没接触过哦).