三大范式
第一范式(1NF) :第一范式要求关系中的属性必须是原子项,即不可再分的基本类型。
原始表中,其中”工程地址”列还可以细分为省份,城市等。在国外,更多的程序把”姓名”列也分成2列,即”姓”和“名”。

第二范式(2NF):要求实体的属性完全依赖于主关键字。简而言之, 第二范式就是在第一范式的基础上属性完全依赖于主键。
例如:原始表中描述了工程信息,员工信息等。这样就造成了大量数据的重复。按照第二范 式,我们可以将原始表分为工程信息表与员工信息表


第三范式(3NF):不存在非关键字段对任意候选关键字段的传递函数依赖。
例如:现在我们来看看在第二范式的讲解中,我们将表1-1拆分成了两张表。这两个表是否符合第三范式呢。在员工信息表中包含:”员工编号”、”员工名称”、”职务”、”薪资水平”,而我们知道,薪资水平是有职务决定,这里”薪资水平”通过”职务”与员工相关,则不符合第三范式。我们需要将员工信息表进一步拆分,如下
字段类型分析
char和varchar
char和varchar都是用来存储字符串类型的数据,但是他们保存和检索的方式不一样.char属于固定长度的字符类型, varchar属于可变长的字符类型
gbk(1个字符,两个字节 )

utf8(1个字符,三个字节)

由于char是固定长度的,所以它的处理速度比varchar快得多,但是其缺点是浪费存储空间,程序需要对尾行空格进行处理,所以对那些变化不打并且查询速度有较高的要求的数据可以考虑使用char类型来存储。
数字类型
时间类型
DATETIME 用于表示 年月日 时分秒,是 DATE 和 TIME 的组合,并且记录的年份(见上表)比较长久。如果实际应用中有这样的需求,就可以使用 DATETIME 类型。
TIMESTAMP 用于表示 年月日 时分秒,但是记录的年份(见上表)比较短暂,TIMESTAMP列必须有默认值,默认值可以 为“0000-00-00 00:00:00”,但不能为null。TIMESTAMP 和时区相关,更能反映当前时间。
DATE 用于表示 年月日,如果实际应用值需要保存 年月日 就可以使用 DATE。
TIME 用于表示 时分秒,如果实际应用值需要保存 时分秒 就可以使用 TIME。
YEAR 用于表示 年份,YEAR 有 2 位(最好使用4位)和 4 位格式的年。 默认是4位。



