MySQL(一)

阅读目录

 


回到顶部

一 数据库与数据库管理系统

DB: 数据库 (Database)

即存储数据的 "仓库", 其本质是一个文件系统。它保存了一系列有组织的数据。

DBMS: 数据库管理系统 (Database Management System)

是一种操纵和管理数据库的大型软件, 用于建立、使用和维护数据库, 对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据。

SQL: 结构化查询语言 (Structured Query Language)

专门用来与数据库通信的语言。

回到顶部

二 RDBMS 与非 RDBMS 对比

2.1 关系型数据库 (RDBMS)

2.1.1 实质

  • 这种类型的数据库是最古老的数据库类型, 关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。
  • 关系型数据库以行 (row)列 (colum)的形式存储数据, 以便于用户理解。这一系列的行和列被称为表 (table), 一组表组成了一个库 (database)。
  • 表与表之间的数据记录有关系 (relationship)。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系型数据库, 就是建立在关系模型基础上的数据库。
  • SQL 就是关系型数据库的查询语言。

2.1.2 优势

  • 复杂查询

  可以使用 SQL 语句方便的在一个表以及多个表之间做非常复杂的数据查询。

  • 事务支持

  使得对于安全性能很高的数据访问要求得以实现。

2.2 非关系型数据库 (非 RDBMS)

2.2.1  介绍

    非关系型数据库, 可看成传统关系型数据库的功能阉割版本, 基于键值对存储数据, 不需要经过 SQL 层的解析。性能非常高。同时, 通过减少不常用的功能, 进一步提高性能。

2.2.2 有哪些非关系型数据库

键值型数据库

键值型数据库通过 key-value 键值的方式来存储数据, 其中 key 和 value 可以是简单的对象, 也可以是复杂的对象。key 作为唯一的标识符, 优点是查找速度快, 在这方面明显优于关系型数据库, 缺点是无法像关系型数据库一样使用条件过滤 (比如 WHERE), 如果你不知道去哪里找数据, 就要遍历所有的键。这就会消耗大量的计算。

   键值型数据库典型的使用场景是作为内存缓存Redis是最流行的键值型数据库。

文档型数据库

 此类数据库可存放并获取文档, 可以是 XML、JSON 等格式。在数据库中文档作为处理信息的基本单位, 一个文档就相当于一条记录。文档数据库所存放的文档, 就相当于键值数据库所存放的 "值"。MongDB 是最流行的文档行数据库。此外, 还有 CouchDB 等。

  搜索引擎数据库

 虽然关系型数据库采用了索引提升检索效率, 但是针对全文索引效率较低。搜索引擎数据库是应用在搜索引擎领域的数据存储形式, 由于搜索引擎会爬取大量的数据, 并以特定的格式进行存储, 这样在检索的时候才能保证性能最优。核心原理是 "倒排索引"。

   典型产品: Solr、Elasticsearch、Splunk 等。

列式数据库

列式数据库是相对于行式存储的数据库, Oracle、MySQL、SQL server 等数据库都是采用行式存储 (Row-based), 而列式数据库是将数据按照列存储到数据库中, 这样做的好处是可以大量降低系统的 I/O, 适合于分布式文件系统, 不足在于功能相对有限。典型产品: HBase 等。

 图形数据库

图形数据库, 利用了图这种数据结构存储了实体 (对象) 之间的关系。图形数据库最典型的例子就是社交网络中人与人的关系。数据模型主要是以节点和边 (关系) 来实现, 特点在于能高效地解决复杂的关系问题。

图形数据库就是一种存储图形关系的数据库。它利用了图这种数据结构存储了实体 (对象) 之间的关系。关系型数据库用于存储明确关系的数据, 但对于复杂关系的数据存储却有些力不从心。如社交网络中人物之间的关系, 如果用关系型数据库则非常复杂, 用图形数据库将非常简单。典型产品: Neo4J、InfoGrid 等。

回到顶部

三 ER 模型与表记录的 4 种关系

3.1 关系型数据库设计规则

  • 关系型数据库的典型数据结构就是数据表, 这些数据表的组成都是结构化的 (Structured)。
  • 将数据放到表中, 表再放到库中。
  • 一个数据库种可以有多个表, 每个表都有一个名字, 用来标识自己。表名具有唯一性
  • 表具有一些特性, 这些特性定义了数据在表中如何存储, 类似 Java 和 Python 中 "类" 的设计。

3.1.1 表、记录、字段

  • E-R(entity-relationship, 实体 - 联系) 模型中有三个主要概念是: 实体集属性联系集
  • 一个实体集 (class) 对应于数据库中的一个表 (table), 一个实体(instance) 则对应于数据库表中的一行 (row), 也成为一条记录(record)。一个属性(attribute) 对应于数据库表中的一列(column), 也成为一个字段(field)。

3.1.2. 表的关联关系

  • 表与表之间的数据记录有关系 (relationship)。现实世界中得各种实体以及实体之间的各种联系均用关系模型来表示。
  • 四种: 一对一关联、一对多关联、多对多关联、自我引用。

3.1.3 一对一关联 (one-to-one)

  • 在实际的开发中应用不多, 因为一对一可以创建成一张表。
  • 举例: 设计学生表: 学号、姓名、手机号码、班级、系别、身份证号码、家庭住址、籍贯、紧急联系人、...  
  • > 拆分为两个表: 两个表的记录是一一对应关系。
  • 基础信息表(常用信息) : 学号、姓名、手机号码、班级、系别
  • 档案信息表(不常用信息) : 学号、身份证号码、家庭住址、籍贯、紧急联系人...

 两种建表原则:

  • 外键唯一: 主表的主键和从表的外键 (唯一), 形成主外键关系, 外键唯一。
  • 外键是主键: 主表的主键和从表的主键, 形成主外键关系。

3.1.4 一对多关联 (one-to-many)

  • 常见实例场景: 客户表和订单表、分类表和商品表、部门表和员工表。
  • 举例:

    员工表: 编号、姓名、...、所属部门

    部门表: 编号、名称、简介

  • 一对多建表原则: 在从表 (多方) 创建一个字段, 字段作为外键指向主表 (一方) 的主键

3.1.5 多对多 (many-to-many)

要表示多对多关系, 必须创建第三个表, 该表通常称为联接表。它将多对多关系划分为两个一对多关系。将这两个表的主键都插入到第三个表中。

  • 举例: 学生: 课程

  学生信息表: 一行代表一个学生的信息 (学号、姓名、手机号码、班级、系别...)

  课程信息表: 一行代表一个课程的信息 (课程编号、授课老师、简介...)

  选课信息表: 一个学生可以选多门课, 一门课可以被多个学生选择


__EOF__

  • 本文作者: 不知忧
  • 本文链接: https://www.cnblogs.com/buzhiyou/p/18042420
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。