⼀、数据库介绍

(⼀)、什么是数据库

  1. 数据库(database)就是存储数据的仓库。
  • 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有不同的API⽤于创建、存储、管理数据。
  • 为了⽅便数据的存储和管理,将数据按照特定的规律存储在磁盘上。通过数据库管理系统,有效地组织和管理存储在数据库中的数据。
  • 数据库(database)是按照数据结构来组织、存储和管理数据的仓库(通常是⼀个⽂件或⼀组⽂件)。
  • 理解数据库的⼀种最简单的办法就是将其想象为⼀个⽂件柜,此⽂件柜是⼀个存放数据的物理位置。
  1. 为什么要⽤数据库
  • 数据其实可以存储在⽂本⽂件中,但是只适⽤于数据量很少的时候,数据量很少的情况下,在⽂件中保存数据、读写数据,操作简单便利且速度快;但是当数据量稍微⼤的情况,普通⽂本⽂件保存数据的⽅式就显得捉襟⻅肘,甚⾄束⼿⽆策。⽐如数据结构、数据类型⽆法设计,数据读写⽅式复杂且速度慢,对于复杂的数据查询更是⽆法做到。所以需要专业的数据库软件;
  • 存储数据也可以使⽤微软的 Excel,但是,随着数据越来越多,在 Excel
    这样的电⼦表格⾥查找数据就变得很慢,⽽且不可靠。所以需要更⾼效的数
    据库管理软件。
  1. 数据库分类
  • ⽽在当今的互联⽹中,最常⻅的数据库模型主要是两种,即关系型数据库和⾮关系型数据库。
  • 关系型数据库包括:Oracle、MySQL、SQLServer、Access、DB2等
  • ⾮关系型数据库包括:
  • 键值存储型数据库:Redis
  • ⽂档存储型数据库:MongoDB、CouchDB
  • 列表存储型数据库:HBase
  • 图数据库:FlockDB
  1. 数据库中⼏个名词
  • DB:是指datebase(数据库)
    数据库是存储数据的⼀个集合,数据库中通常使⽤数据表等组成,⽽数据表是由数据的字段和数据的值等信息组成。
  • DBMS:是指datebase mangement systerm(数据库管理系统)
    它是操作数据库和管理数据库的⼀个系统,⽐如mysql、sqlserver等都是属于数据库管理软件,⼈们通过这些系统或者⼯具来管理数据库内的数据。
  • DBS:是指datebase systerm (数据库系统)
    数据库系统⼜数据库和数据库管理软件等组成,数据库是⼀个逻辑上的存储数据的概念,⽽对应的是实体是数据库管理软件存储存储在硬盘上的数据
    库,所以数据库系统包含数据库和数据库管理软件。

(⼆)关系型数据库

  1. 关系型数据库模型是把复杂的数据结构归结为简单的⼆元关系(即⼆维表格
    形式)。
    在关系型数据库中,对数据的操作⼏乎全部建⽴在⼀个或多个关系表格上,通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。关系型数据库诞⽣40多年了,从理论产⽣发展到现实产品,例如:Oracle和MySQL,Oracle在数据库领域上升到霸主地位,形成每年⾼达数百亿美元的庞⼤产业市场。MySql数据库在中⼩企业和免费市场具有绝对地位.
  2. 关系型数据库的常⽤术语
    1)、数据库表table:
  • 表是数据库存储数据的基本单位。数据库正是⼀些互相关联的表的集合。
  • 数据库中的表与Excel电⼦表格结构⼀致。
    2)、列column:
  • 列也叫做字段。将具有相同属性的数据放在同⼀列中。
  • 例如⽤户名字段,该列中只包含每个会员的⽤户名账号信息。
    3)、⾏row:
  • ⾏也叫做记录。是⼀组相关的数据,例如⽤户账号表中每⼀条都保存的是⼀个⽤户的完整账号信息;
  • 表中的数据是按⾏存储的,所保存的每个记录存储在⾃⼰的⾏内,如果将表想象为⽹格,⽹格中垂直的列为表列,⽔平⾏为表⾏。
    4)、主键primary key:
  • 每个表中数据绝对唯⼀的字段就是该表的主键。
  • ⼀个数据表中只能包含⼀个主键。往往使⽤主键来标记每⼀条数据,从⽽查询数据。换句话说就是,表中每⼀⾏都应该有可以唯⼀标识⾃⼰的⼀列。
  • ⼀个顾客表中可以使⽤顾客编码列,⽽订单表可以使⽤订单ID等。⼀个表中没有主键的话,更新或删除表中特定⾏很困难,因为没有安全的⽅法保证只涉及相关的⾏。
  • 主键的规则表中的任何列都可以作为主键,只要它满⾜⼀下条件:
  • 任何两⾏都不具有相同的主键值(每⼀⾏的主键值是唯⼀的)。
  • 每个⾏都必须具有⼀个主键值(主键不允许null值)
  • 主键的好习惯除了强制的规则外,应该坚持的⼏个普遍认可的好习惯:
  • 不更新主键列中的值
  • 不重⽤主键列的值
  • 不在主键列中使⽤可能会更改的值
  1. 关系型数据库中的关系
    在关系型数据库中,弄清各个模块(或者叫实体或者叫表)之间的关系⾮常重要。关系型数据库中有三种基本关系:
  • 1-1(⼀对⼀):⽐如⼀个国家对应⼀个⾸都
  • 1-N(⼀对多):⽐如⼀个分类下可以有多个商品,⼀个班级有多个学⽣,这种关系往往存在从属关系
  • N-N(多对多):⽐如学⽣和课程,⼀个学⽣可以选多⻔课,不同的学⽣也可以选择同⼀⻔课

(三)、数据库范式

  1. 范式(Normal Form)
  • 冗余:不同数据库表中保存了完全相同的数据就产⽣了数据冗余。冗余降低了数据库的利⽤率甚⾄性能,但提⾼了数据的安全性和访问性;
  • 为了建⽴冗余较⼩、结构合理的数据库,设计数据库时必须遵循⼀定的规则。在关系型数据库中这种规则就称为范式。范式是符合某⼀种设计要求的总结。要想设计⼀个结构合理的关系型数据库,必须满⾜⼀定的范式。在实际开发中最为常⻅的设计范式有三个,即:第⼀范式(1NF),第⼆范式(2NF),第三范式(3NF)
  1. 第⼀范式(确保每列保持原⼦性)
  • 第⼀范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原⼦值,就说明该数据库表满⾜了第⼀范式。
  • 第⼀范式的合理遵循需要根据系统的实际需求来定。⽐如某些数据库系统中需要⽤到“地址”这个属性,本来直接将“地址”属性设计成⼀个数据库表的字段就⾏。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就⾮要将“地 址”这个属性重新拆分为省份、市、详细地址等多个部分进⾏存储,这样在对地址中某⼀部分操作的时候将⾮常⽅便。这样设计才算满⾜了数据库的第⼀范式,
    如下表所示。

    上表所示的⽤户信息遵循了第⼀范式的要求,这样在对⽤户使⽤城市进⾏分类的时候
    就⾮常⽅便,也提⾼了数据库的性能。
  1. 第⼆范式(确保表中的每列都和主键相关)
  • 第⼆范式在第⼀范式的基础之上更进⼀层。第⼆范式需要确保数据库表中的每⼀列都和主键相关,⽽不能只与主键的某⼀部分相关(主要针对联合主键⽽⾔)。也就是说在⼀个数据库表中,⼀个表中只能保存⼀种数据,不可以把多种数据保存在同⼀张数据库表中。
  • ⽐如要设计⼀个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。
  • 订单信息表
  • 存储 数据库 应用 架构 存储数据库的定义_数据

  • 这样就产⽣⼀个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,⽽仅仅是与商品编号相关。所以在这⾥违反了第⼆范式的设计原则。
  • ⽽如果把这个订单信息表进⾏拆分,把商品信息分离到另⼀个表中,把订单项⽬表也分离到另⼀个表中,就⾮常完美了。如下所示。
  • 存储 数据库 应用 架构 存储数据库的定义_存储 数据库 应用 架构_02


  • 存储 数据库 应用 架构 存储数据库的定义_数据_03


  • 存储 数据库 应用 架构 存储数据库的定义_数据_04

  • 这样设计,在很⼤程度上减⼩了数据库的冗余。如果要获取订单的商品信息,使⽤商品编号到商品信息表中查询即可。
  1. 第三范式(确保每列都和主键列直接相关,⽽不是间接相关)
  • 第三范式需要确保数据表中的每⼀列数据都和主键直接相关,⽽不能间接相关。
  • ⽐如在设计⼀个订单数据表的时候,可以将客户编号作为⼀个外键和订单表建⽴相应的关系。⽽不可以在订单表中添加关于客户其它信息(⽐如姓名、所属公司等)的字段。如下⾯这两个表所示的设计就是⼀个满⾜第三范式的数据库表。
  • 存储 数据库 应用 架构 存储数据库的定义_存储 数据库 应用 架构_05

  • 这样在查询订单信息的时候,就可以使⽤客户编号来引⽤客户信息表中的记录,也不必在订单信息表中多次输⼊客户信息的内容,减⼩了数据冗余。