本节书摘来自华章出版社《MySQL DBA修炼之道》一书中的第3章,第3.1节,作者:陈晓勇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
第二部分
开发篇
本篇首先讲述数据库开发的一些基础知识,如关系数据模型、常用的SQL语法、范式、索引、事务等,然后介绍编程开发将会涉及的数据库的一些技巧,最后结合生产实际,提供一份开发规范供大家参考。
第3章开发基础
本章将为读者介绍 MySQL 数据库相关的开发基础,首先,介绍一些基础概念,然后讲解关系数据模型和 SQL 基础。由于在互联网开发者中,PHP 开发者占据了相当大的比重,因此这里也将简要介绍下 PHP 开发者应该掌握的一些基础知识和开发注意事项。最后,要接触的是 MySQL 数据库更深层次的内容——索引、主键、字符集等。
3.1 相关基础概念
(1)框架
在软件开发过程中,研发人员经常借助框架(framework)来辅助自己进行软件开发。成熟的框架可以帮助处理很多细节性的问题,并完成一些基础性的工作,如生成访问数据库的代码、简化网络编程,这样开发者就会有更多的时间和精力专注于业务逻辑的设计。但目前仍存在的一个问题是,一些框架对于数据库的使用不符合我们的预期,或者说不友好,故而有必要先了解一下开发框架是如何存取数据的。大家有兴趣的话,可深入学习和使用如下这些业内使用比较广泛的一些框架,如Django(Python)、Ruby on Rails(Ruby)、Zend Framework(PHP)、Spring(JAVA) 等。
(2)数据模型
数据模型(data model)是数据的定义和格式,即数据是如何组织的。关系数据模型是以二维表的结构来表示实体与实体之间的联系,每个二维表又可称为关系。关系可以看作是一系列记录的集合。如,员工关系表(见表3-1)和项目关系表(见表3-2)。
从以上两个关系表中可以看出,项目表和员工表是存在某种关系的。众多的关系表,以及关系表之间的关系,构成了关系数据模型,而支持关系模型的数据库管理系统则称之为关系数据库管理系统。
其他的模型还有XML和图数据模型(graph data model)等。
XML是一种层次结构的数据结构,使用标签、标签值来标识信息,如下面的这个xml文件。
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
而图数据模型存储的数据则是以点、线的方式进行存储的。
(3)schema
schema可译作“模式”,不同的数据库管理系统,schema的意义会有些不同。依据维基百科的定义:schema指的是用数据库管理系统支持的语言描述的数据结构,它定义了数据是如何组织构建的。
典型的关系数据模型,是以数据库表的形式来组织数据的,数据存储于一系列设计好的表中。也就是说,关系数据库的schema就是数据库中各种关系的结构化描述。一般来说,数据建模就是设计数据表的过程,一般在项目初期就设计好表结构,在开发过程中可能会不断地调整表结构,但一旦应用上线,表结构往往就不会频繁变更了。若项目积累了大量数据,这时再修改表结构可能会很耗时,从而严重影响在线服务,所以前期进行一个优良的数据库表设计是很有必要的,这也考验着开发人员的数据建模能力。数据库表的设计一般由经验丰富的开发人员来负责,如果DBA时间精力允许,也会参与到重要的项目数据库表设计中。
MySQL中的schema可以看作是数据库(database)的同义词。我们创建一个schema,其实就是创建一个数据库(create database)。 而在其他数据库中,schema的概念则略有不同。
(4)结构化数据
结构化数据通常是指被记录信息的类型,格式等属性是固定的,一般可存储于关系数据库或电子表格中,可以用数据记录的形式进行表达和存储,如产品及其零部件的名称、代号、设计日期、类型等信息。结构化数据往往需要预先定义好业务数据类型的模型,确定这些数据类型是如何存储、处理和访问的。例如确定业务数据的哪些字段信息需要存储,以及这些信息的数据类型(数字、货币、字符串、日期等)和数据输入的校验(如字符个数、日期范围等)。很长时间以来,关系数据库或电子表格软件是处理结构化数据的最佳工具,所以业内也有人简单地把存储在关系数据库中能用二维表格表示的数据称为结构化数据,如来自于企业内部已经被变换成固定规则、格式的数据,而把不方便用关系数据库存取的数据称为非结构化数据,如市场比较和分析报告、股票行情等就是以非结构化的、不可预测的格式呈现的数据。
(5)非结构化数据
有些信息无法用数字或统一的结构来表示,或者说没有一个预定义的数据模型,如文本、照片和图形图像、声音、视频、网页、PDF文件、PowerPoint演示文稿、电子邮件、博客、Wiki和文字处理文档等,我们将其称之为非结构化数据。
(6)半结构化数据
半结构化数据介于结构化数据和非结构化数据之间,它可看作是一种结构化数据,但是缺乏严格的数据模型,半结构化数据可通过标签或其他类型的标记识别数据中的某些元素,但半结构化数据不具有刚性结构。XML和其他标记语言经常被用来管理半结构化数据。
例如,文字处理软件现在可以定义元数据,用于显示作者的姓名和创建日期,但数据的主体——文本文件仍然是非结构化数据。电子邮件有发件人、收件人、日期、时间和其他标识信息,但电子邮件消息的内容和附件仍然是非结构化数据。照片或图形图像能使用一些关键字进行标识,如创作者、日期、地点和关键字,从而能够组织和定位照片和图形图像,但图像本身是非结构化数据。
相对于非结构化数据,结构化数据往往存储于关系数据库中,可以利用关系数据库进行高效地存储和检索,但现实中的数据并不是总能被固定的结构来描述的,生活也并不总是合适整齐的小盒子。非结构化数据和半结构化数据是现实世界的主要数据,而且正在以惊人的速度激增,它们的增长比结构化数据的增长更快,在大数据时代,非结构化(半结构化)数据的提取、存储和管理是一个难点,非结构化数据能否被有效地管理和应用,这对于企业未来的发展道路影响深远。
(7)DDL
数据定义语言(Data Definition Language,DDL)是负责数据结构定义与数据库对象定义的语言。为了设计schema,如创建数据库,创建表,这时就需要用到数据定义语言。我们常用的有CREATE、ALTER、DROP语句。例如,创建数据库的语句如下。CREATE DATABASE databae_name;
创建表的语句如下。CREATE TABLE table_name (id INT, name VARCHAR(10));
添加字段的语句如下。ALTER TABLE table_name ADD COLUMN column_name INT ;
删除表的语句如下。DROP TABLE table_name;
(8)DML
数据操作语言(Data Manipulation Language,DML)是用来查询和修改数据的语句,包括SELECT、INSERT、UPDATE、DELETE 4种语句,分别代表查询、插入、更新与删除,有很多开发人员将它们称之为“CRUD”(Create、Read、Update和Delete),对应的操作见表3-3。