Skip to content

Latest commit

 

History

History
 
 

DataBase

数据(Data)是描述事物的符号,是数据库中存储的基本对象。在日常生活中,人们使用自然语言来描述事物,而在计算机中,为了存储和处理事物,必须抽取出事物的某些本质特性,用记录的形式来描述。例如在员工档案中,人们最感兴趣的是员工号、员工姓名、员工性别、出生日期、工资、部门号等信息。

数据库(DataBase,DB)是指按一定的数据模型组织、描述和存储的数据的集合。数据库中的数据具有较小的冗余度和较高的数据独立性,可以实现数据共享,由数据库管理系统统一管理。

基本概念

关系数据库是表的集合,每个表有唯一的名字;表是实体的集合,表中的每一行称为一个实体;实体是一系列属性值的组合(也可以说是属性的关系)。

码是关系中的一个性质,它是一个或多个属性的集合,有超码、候选码和主码。关系中任意两个元组都不允许在码属性上有相同的值。

关系代数是一种抽象的查询语言,用对关系的运算来表达查询,作为研究关系数据语言的数学工具。关系代数的运算对象是关系,运算结果亦为关系。

除了关系数据库,NoSQL数据库在 Web 2.0 时代也有了很大发展。

更多内容参考 Concept

SQL

SQL (结构化查询语言)是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。SQL 可与数据库程序协同工作,比如 MS Access、DB2、MS SQL Server、Oracle以及其他数据库系统。

可以把 SQL 分为两个部分:数据操作语言 (DML)数据定义语言 (DDL)。DML 提供从数据库中查询信息,以及在数据库中插入、删除、修改元组的能力,DDL 提供定义、删除、修改关系模式的命令。(SQL 语句对大小写不敏感)

SQL 基本内容参考 SQL_Basic

事务是一组原子性的 SQL 查询,事务内的语句要么全部执行成功,要么全部执行失败。事务由 begin transaction 和 end transaction 之间执行的全体操作组成,这些步骤集合必须作为一个单一的、不可分割的单元出现。

SQL 允许通过查询来定义虚关系,它在概念上包含查询的结果。虚关系并不预先计算并存储,而是在使用虚关系的时候才通过执行查询进行计算。任何像这种不是逻辑模型的一部分,但作为虚关系对用户可见的关系称为视图(View)。

更多高级内容参考 SQL_More

关系数据库设计

一般而言,关系数据库设计的目标是生成一组关系模式,使我们存储信息时避免不必要的冗余,并且可以让我们方便地获取信息。这是通过设计满足适当范式(normal form)的数据库模式来实现的。

我们常用的数据库范式主要是第一、二、三范式以及 BCNF 范式。如果 R 的所有属性的域都是原子的,则称关系模式 R 属于第一范式。第二范式在第一范式的基础上,消除了非主属性对于候选码的部分函数依赖。3NF 在 2NF 的基础上,消除了非主属性对于候选码的传递函数依赖。BCNF 范式在 3NF 的基础上,消除了主属性对于候选码的部分函数依赖与传递函数依赖

数据库设计中,范式化和非范式化各有优略,需要适当地选择设计方案。

更多内容参考 Design

Mysql 数据库

MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。主要有以下特点:

  • 使用业内所熟悉的标准SQL数据库语言。
  • 基于开源许可发布,无需付费即可使用。
  • 自身的功能非常强大,足以匹敌绝大多数功能强大但却价格昂贵的数据库软件。
  • 可运行于多个操作系统,支持多种语言,包括 PHP、PERL、C、C++ 及 Java 等语言。
  • 非常迅速,即使面对大型数据集也毫无滞涩。
  • 支持大型数据库,最高可在一个表中容纳 5千多万行。每张表的默认文件大小限制为 4GB。
  • 可以自定义。开源 GPL 许可保证了程序员可以自由修改 MySQL,以便适应各自特殊的开发环境。

更多内容参考 Mysql

索引技术

数据库查询是数据库的最主要功能之一,我们都希望查询数据的速度能尽可能的快。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的。

数据库系统除了保存所需要的数据,还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。

从数据结构角度看,索引分为B+树索引、hash索引、FULLTEXT索引;从物理存储角度来看,索引可以分为聚集索引、非聚集索引;从逻辑角度来看,索引分为主键索引、唯一索引、普通索引或者单列索引、多列索引(复合索引)。

更多内容参考 Index

高级主题

数据库中有可能会存在不一致的数据。造成数据不一致的原因主要有:

  • 数据冗余: 如果数据库中存在冗余数据,比如两张表中都存储了用户的地址,在用户的地址发生改变时,如果只更新了一张表中的数据,那么这两张表中就有了不一致的数据。
  • 并发控制不当: 比如某个订票系统中,两个用户在同一时间订同一张票,如果并发控制不当,可能会导致一张票被两个用户预订的情况。当然这也与元数据的设计有关。
  • 故障和错误: 如果软硬件发生故障造成数据丢失等情况,也可能引起数据不一致的情况。因此我们需要提供数据库维护和数据恢复的一些措施。

事物并发丢失修改

更多阅读

《高性能Mysql》
《数据库系统概念》