本文的主要围绕着下面这些问题展开的,在阅读之前可以先自己思考一下问题的答案是什么
- 定义数据库和数据表的语法是什么?
- 定义数据表时,都有哪些约束?
- 设计数据库时,有哪些需要注意的点?
定义数据库的结构和数据表的结构主要使用数据库的DDL语言,DDL的全称是Data Definition Language,中文是数据定义语言。
在DDL中,最常用的就是对数据表的增删改,分别对应的命令是CREATE、DROP和ALTER。
执行DDL的时候,不需要手动COMMIT,就可以完成执行任务
一、操作数据库和数据表
1、对数据库进行定义
CREATE DATABASE dba; // 创建一个名为dba的数据库
DROP DATABASE bda; // 删除一个名为dba的数据库
2、对数据表进行定义
CREATE TABLE [table_name](字段名 数据类型,......)
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` INT ( 10 ) NOT NULL AUTO_INCREMENT,
`class_id` INT ( 11 ) NOT NULL,
`student_name` VARCHAR ( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`height` FLOAT ( 3, 2 ) NULL DEFAULT 0.00,
PRIMARY KEY ( `id` ) USING BTREE,
UNIQUE INDEX `student_name` ( `student_name` ) USING BTREE
) ENGINE = INNODB CHARACTER
SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
- 字段的定义结尾使用英文逗号
(,)
,但是最后一个字段的结束后没有逗号 - 语句最后以分号(;)作为结束符
NOT NULL
表明整个字段不能是空值AUTO_INCREMENT
代表主键自动增长- 数据类型中
int(10)
代表整数类型,显示长度为11位,括号中的参数11代表的是最大有效显示长度,与类型包含的数值范围大小无关 varchar(255)
代表的是最大长度为255的可变字符串类型student_name
字段的字符编码是utf8
,排序规则是utf8_general_ci
,代表对大小写不敏感,如果设置为utf8_bin
,代表对大小写敏感FLOAT ( 3, 2 )
表示值一共显示3位整数,其中2位位于小数点后面,当插入大于1位整数时会报错,小数位数过多时,会四舍五入保留两位小数
3、修改表结构
1.添加字段,比如我在数据表中添加一个age字段,类型为int(11)
ALTER TABLE student ADD (age int(11));
2.修改字段名,将age字段改成student_age
ALTER TABLE student RENAME COLUMN age to student_age
3.修改字段的数据类型,将student_age
的数据类型设置为float(3,1)
ALTER TABLE student MODIFY (student_age float(3,1));
4.删除字段, 删除刚才添加的student_age
字段
ALTER TABLE student DROP COLUMN student_age;
二、定义数据表的约束
为了保证RDBMS里面数据的准确性和一致性,有时候我们需要对字段添加约束。
主键约束
主键起的作用是唯一标识一条记录,不能重复,不能为空,即UNIQUE+NOT NULL
。一个数据表的主键只能有一个。主键可以是一个字段,也可以由多个字段复合组成。
外键约束
外键确保了表与表之间引用的完整性。
一个表中的外键对应另一张表的主键。
外键可以是重复的,也可以为空。
唯一性约束
唯一性约束表明了字段在表中的数值是唯一的,即使我们已经有了主键,还可以对其他字段进行唯一性约束。
唯一性约束和普通索引(NORMAL INDEX)之间是有区别的。唯一性约束相当于创建了一个约束和普通索引,目的是保证字段的正确性,而普通索引只是提升数据检索的速度,并不对字段的唯一性进行约束。
NOT NULL约束
非空约束,该字段不应为空,必须有取值
DEFAULT
表明了字段的默认值。
CHECK约束
用来检查特定字段取值范围的有效性,CHECK约束的结果不能为FALSE,比如我们可以对身高height的数值进行CHECK约束,必须≥0,且<3,即CHECK(height>=0 AND height<3)
。
三、设计数据库时,有哪些需要注意的点
核心就是简单可复用。简单指的是用更少的表、更少的字段、更少的联合主键字段来完成数据表的设计。可复用则是通过主键、外键的使用来增强数据表之间的复用率。因为一个主键可以理解是一张表的代表。键设计得越多,证明它们之间的利用率越高。
数据表的个数越少越好
数据表越少,证明实体和联系设计得越简洁,既方便理解又方便操作。
数据表中的字段个数越少越好
字段个数越多,数据冗余的可能性越大。设置字段个数少的前提是各个字段相互独立,而不是某个字段的取值可以由其他字段计算出来。当然字段个数少是相对的,我们通常会在数据冗余和检索效率中进行平衡。
数据表中联合主键的字段个数越少越好
设置主键是为了确定唯一性,当一个字段无法确定唯一性的时候,就需要采用联合主键的方式(也就是用多个字段来定义一个主键)。联合主键中的字段越多,占用的索引空间越大,不仅会加大理解难度,还会增加运行时间和索引空间,因此联合主键的字段个数越少越好。
使用主键和外键越多越好
数据库的设计实际上就是定义各种表,以及各种字段之间的关系。这些关系越多,证明这些实体之间的冗余度越低,利用度越高。这样做的好处在于不仅保证了数据表之间的独立性,还能提升相互之间的关联使用率。