参考书籍:Mysql核心技术与最佳实践 /孔祥盛编著. -北京:人民邮电出版社,2014.5 ISBN 978-7-115-33769-6
虽然用了三年的Mysql,但是没有系统性的刷一遍知识框架,导致经常小题大做,写出浪费时间、空间语句。随刷之。
一、数据库概述
数据库(Database,DB)是存储、管理数据的容器。
1、关系数据库管理系统
数据是数据库核心。数据库容器通常包含如表、视图、索引、函数、存储过程、触发器、事件等,最终以文件的形式存储与外村。
数据库管理系统是一个管理、控制数据库容器中各种数据库对象的系统软件。
数据库管理系统常用的数学模型包括层次模型、网状模型、关系模型及面向对象模型等。基于关系模型的数据库管理系统成为关系数据库管理系统(Relational Database Management System,RDBMS),且目前关系数据库占据主导地位。
2、关系数据库
关系数据库中“关系”,实质上是一张二维表。
数据库表每一列(字段)都有字段名标记,表中每一行陈为一条记录。
3、结构化查询语言SQL
Structured Query Language,SQL 是一种关系数据库语言,几乎所有关系数据库也都支持SQL。
二、数据库设计相关知识
1、商业知识
2、辅助工具
2.1模型
模型包括数学模型(公式)、描述模型(报表、列表、备忘录)、图形模型(E-R、数据流程图),对事物特征进行抽象过程陈为数据建模。
2.2工具
2.3技术
常用技术:面向对象分析和设计技术、结构化分析和设计技术、软件测试技术、关系数据库设计技术等。
5、编码规范
5.1命名
- 驼峰标记法
- 单词间"_"间隔
其它数据库命名原则:函数名使用"_fun"后缀,存储过程名使用"_proc"后缀,视图名使用"_view"后缀,触发器名使用"_trig"后缀,索引名使用"_index"后缀;外键约束名使用"_fk“后缀等。
5.2注释
单行:"#"或"--"
多行:"/*......*/"
5.3书写规范
每个缩进的单位约定是一个Tab。Mysql中begin-end语句块中的第一条语句需要缩进,同一语句块内所有语句上下对齐。
5.4 其它
Mysql内delete等关键字不区分大小写
三、E-R图
关系数据库设计一般都从E-R图(Entity-Relationship Diagram)设计开始。
1、实体和属性
每个实体对应于数据库中的一张数据表
2、关系
在E-R图中,实体间的关系通常用一条线段表示,其关系是双向的。
2.1基数
基数表示一个实体到另一个实体之间关联的数目。关系可分为一对一、一对多、多对多
2.2元
元表示关系所关联的实体个数
2.3关联
关联表示实体间的属性。经常会用来表示实体间发生的事件或者多元关系等等。
3、设计原则
- 属性应该存在于且只存在于某一个实体或关联,避免统一数据存储于多个数据表而导致数据冗余
- 实体是一个单独个体,不能存在于另一个实体中成为其属性
- 同一个实体在同一个E-R图内仅出现一次
四、关系数据库设计
有E-R图生成数据库表步骤如下:
1、为每个实体建立一张数据表
2、为每张表定义一个主键
- 推荐简单关键字为主键
- 避免复合主键
- 添加无意义字段为主键
3、建立新表表示多对多关系
如果表A中的一个字段A对应于表B的主键B,则字段A成为表A的外键
如果两个实体间关系为多对多关系,则需要增加新表表示。
4、为字段选取合适数据类型
5、定义约束条件
- 主键(primary key)约束:每个表必有
- 外键(foreign key)约束:外键字段所在表陈为子表,主键字段所在表称为父表
- 唯一性(unique)约束:如果希望表中某一字段值不重复,可以为该字段添加唯一性约束
- 非空(not NULL)约束:如果希望该字段值不能取NULL值,可以考虑给该字段添加非空约束
- 检查(check)约束:用于检查字段的输入值是否满足指定条件
- 默认值(default)约束:指定一个字段默认值
6、评价关系质量,并改进
6.1使用规范化减少数据冗余
- 函数依赖:一张表内,两字段值之间的一一对应关系称为函数依赖。
- 第一范式:一张表中同类字段不重复出现,则满足第一范式。
- 第二范式:一张表满足第一范式时,每个“非关键字”字段仅仅函数依赖于主键,则满足第二范式。(如学生表、课程表、成绩表分开则满足第二范式)
- 第三范式:一张表满足第二范式时,且不存在“非关键字”字段函数依赖于任何其它“非关键字”字段,则该表满足第三范式要求。
6.2避免数据经常发生变化
方案一:如在选课系统中避免人数超过课程上限,给课程表添加available字段,表示剩余人数
方案二:由选课表统一得出剩余人数
评价:方案一、二各有利弊。