MySQL笔记——关系模型
关系模型
表的每一行称为记录(Record),记录是一个逻辑意义上的数据。
表的每一列称为字段(Column),同一个表的每一行记录都拥有相同的若干字段。
字段定义了数据类型(整型、浮点型、字符串、日期等),以及是否允许为NULL,NULL表示字段数据不存在,不代表它的值为0,也不代表它的值为空串‘’。
关系数据库中的表和表直接需要建立“一对多”,“多对多”和“一对一”的关系。
主键
关系表中能通过某个字段唯一区分出不同的记录,这个字段被称为主键。
选取主键的基本原则:不使用任何业务相关的字段作为主键。(主键最好不要修改)
因此我们可采用自增性的主键,数据库会在插入数据时自动为每一条记录分配一个自增整数,这样就不用担心主键重复,也不用预先生成主键。
联合主键
对于联合主键,允许一列有重复,只要多个字段可唯一标识记录即可。没有必要尽量不要使用。
外键
由于一个班级可以有多个学生,在关系模型中,班级表和学生表的关系可称为“一对多”,即一个classes的记录可以对应多个students表的记录。在students表中,通过class_id的字段,可以把数据与另一张表关联起来,这种列称为外键。
定义外键约束
ALTER TABLE students ADD CONSTRAINT fk_class_id //定义外键约束 FOREIGN KEY (class_id) //指定class_id为外键 REFERENCES classes (id); //将外键关联到classes表的id列
删除外键约束
ALTER TABLE students DROP FOREIGN KEY fk_class_id;
注意:删除外键约束并没有删除外键这一列。删除列是通过DROP COLUMN...实现的。
多对多关系,比如,一个老师可以对应多个班级,一个班级也可以对应多个老师,因此班级表和老师表存在多对多关系。
一对一关系,一个表的记录对应到另一个表的唯一一个记录。
索引
索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度。
例如,要根据score列进行查询,则对score列创建索引
ALTER TABLE students ADD INDED idx_score (score);
由于身份证号、邮箱地址等具有业务含义,因此不宜作为主键;但是又具有唯一性约束。这时就可以给该列添加一个唯一索引。
例如,students表的name不能重复
ALTER TABLE students ADD UNIQUE INDEX uni_name (name);