三种校正办法:二进制(_bin),区分大小写(_cs),不区分大小写(_ci)

存储引擎:用不同的办法来存储和处理数据

Myisam:查询和插入的效率高,三个独立文件(构造,索引,数据)

php三码合一重蔚php进修第三十二天笔记数据库范式及第三十一天笔记总结 jQuery

Innodb:安全性高,更新和删除效率高(构造),数据保存在ibdata文件中

乱码问题:三码合一,常日是要担保做事器的文件编码与浏览器的显示编码和数据库所设置的客户端编码担保同等

字段类型:数值型,字符型和韶光日期型

数值型:整型,小数型

整型:tinyint(1),smallint(2),mediumint(3),int(4),bigint(8)

小数型:浮点型和定点型

浮点型:float(4)和double(8),精度不一样

定点型:decimal(M,D),M表示总长度,D表示小数部分长度,decimal(65,30)

字符型:char,varchar,text,blob,enum,set

char:char(L),定长的字符长度,系统会分配L个字符的长度,不管实际长度是多少

varchar:varchar(L),变长的字符长度,系统能够最多存放L个字符的长度,系统实际分配的是实际字符所占用的长度+1或者2个字节(保存变长字符才长度)

text&blob:都是存储较大的文本,blob存储二进制文本

enum:列举,数据库对应存储的实际内容是数字(对应列举元素的序列号),类似单选框,enum利用2个字节保存元素,能够保存65535个元素

set:凑集,数据库存储的还是数组,凑集的元素对应的不是一个数值,而是二进制的一个位,十进制与二进制之间的转换,set利用8个字节保存数据,能保存64个凑集元素

韶光日期型:datetime,date,time,timestamp,year

datetime:日期韶光,格式:yyyy-mm-dd HH:ii:ss,占用8个字节存储,存储的范围0000 – 9999

date:日期韶光的日期部分

time:表示一个韶光段,格式:HHH:ii::ss,插入数据时还可以这样:d HH:ii:ss

timestamp:标准整型保存数据,韶光戳,表现形式与datetime,与datetime的差异在于表示的范围不一样

year:年,范围是1900 – 2155,利用1个字节操作

mysql每条数据(记录)的最大长度是65535个字节,这个字段类型基本受该限定影响,text除外(占用10个字节用来保存外部字符串保存的地址)。

能力有多大不代表能表现出来,受平台影响。

字段属性:null/not null,default,primary key,unique key,auto_increment,comment

以上干系联文章请看:重蔚php学习第三十一天条记——MySQL数据库字段属性

关系

如何将自然界中的关系,在mysql数据库中进行设计和表示。

学生表

学号姓名年事PHP1001余秋雨68PHP1002韩寒38

上述信息便是数据库在反应自然界实体内部属性之间的联系的设计。

教室表

教室

容量

D306

100

B2302M

60

教室与学生之间的关系是,一个教室可以容纳多个学生,多个学生在一个教室上课。
这种关系就称之为一对多或者多对一的关系

如何将多对一的关系,在数据库设计中表示呢?

一对一的关系

范式

范式:Normal Formal,指的是对某个事物的规范

现在,范式有六范式:第一范式到第六范式。
从低层到高层是越来越严格。
如果要知足后续范式,必须要知足前面的范式。

关系型数据库的设计只要知足三范式即可。

第一范式:1NF

数据表设计,字段必须具有原子性

西席与上课关系表

讲师性别班级教室代课韶光代课韶光(开始,结束)张三Malephp0226D30230天2016-02-27,2016-05-05张三Malephp0320B20630天2016-03-21,2016-05-30李四Malephp0320B20615天2016-06-01,2016-06-20

如果需求单独须要上课的开始韶光和结束韶光。
就须要将拿到的数据进行拆分,然后再显示。

这种办法就违背了数据库设计的第一范式:原子性,字段不可再分

如何知足第一范式?将须要利用的字段变成最小单位,不可再分

讲师性别班级教室代课韶光开始结束张三Malephp0226D30230天2016-02-272016-05-05张三Malephp0320B20630天2016-03-212016-05-30李四Malephp0320B20615天2016-06-012016-06-20

只要获取对应的开始韶光和结束韶光字段。

为什么要知足第一范式?为了担保数据库的高效性,在须要查询的时候,能够直接从数据库得到相应的数据,而不须要对数据进行加工处理。

第二范式:2NF

要知足第二范式,必须首先知足第一范式

一张表中不能存在部分依赖。
部分依赖指的一张表有一个或者多个字段,依赖部分主键(主键是复合主键)

代课关系表

讲师和班级共同确定一条唯一的记录,称之为复合主键

讲师P性别班级P教室代课韶光开始结束张三Malephp0226D30230天2016-02-272016-05-05张三Malephp0320B20630天2016-03-212016-05-30李四Malephp0320B20615天2016-06-012016-06-20

教室与讲师和班级组成的主键没有关系,但是受班级字段影响。
这个时候,就存在教室依赖班级存在。
个中,班级字段与讲师字段是一个复合主键。

一个字段依赖复合主键中的部分字段(复合主键的某一个字段),违背了第二范式。

常日的办理办法:利用单一字段主键(不适用复合主键),或者给一张表添加一个逻辑主键,与业务无关

ID P讲师性别班级教室代课韶光开始结束1张三Malephp0226D30230天2016-02-272016-05-052张三Malephp0320B20630天2016-03-212016-05-303李四Malephp0320B20615天2016-06-012016-06-20

第三范式:3NF

条件条件知足第二范式

在知足二范式的条件下,不存在通报依赖。

通报依赖:表中的所有字段该当都依赖于主键,而不是依赖于其他字段。
如果是通过依赖其他字段,而其他字段依赖主键,这时候就形成了通报依赖。

代课关系表:一个老师对应一个班级所上课程的天数以及起始结束韶光。

IDP讲师性别班级教室代课韶光开始结束1张三Malephp0226D30230天2016-02-272016-05-052张三Malephp0320B20630天2016-03-212016-05-303李四Malephp0320B20615天2016-06-012016-06-20

代课关系表,哀求必须要有讲师和班级字段,这两个字段都依赖于主键。
但是性别和教室字段与主键没有形成依赖关系,性别依赖了讲师,而教室依赖了班级。
从而形成了通报依赖。

如何取消通报依赖?

将存在的这种依赖新建一张表,然后在原来须要当前实体的地方,利用新实体对应的主键。

总结:数据库的设计如何知足三范式

1.根据详细业务,将字段分解到最小单位,从而不能再分割,知足了1NF

2.不再利用复合主键,利用逻辑主键。
知足2NF

3.每个实体单独建立对应的数据表,凡是须要利用其他表的信息的时候,都利用对应的主键即可,知足了3NF

范式是一个规范,但不是一个逼迫的标准。
没有遵照规范也能担保数据库的正常运行。
知足规范能够使得数据变的精简,没有数据冗余的涌现。

逆规范化

有时候须要特意的设计,不去知足范式。

在某张表中,须要其他表的某个字段(常日不是主键),而该表又被非常频繁利用。
为了担保实行的效率,从而设计了必要数据冗余。

考虑效率和冗余的对抗==》实行效率和磁盘空间的对抗。