一、实体与实体之间的一对一关系
字段比较多时可以通过垂直分隔的方法形成两个表,即形成1:1的关系。
二、实体之间一对多的关系
注意:是在多的一端增加一个字段用于指向所属的另外实体情况。
三、多对多的关系
多对多的实现关系需要在中间建立一个对应关系表。这个对应关系表至少包含两个原先表的各自主键。
对于多对多关系还有一个问题。
其实多对多的关系是将多对多转换成两个一对多,那么在visio设计数据库时如何画箭头指向呢?
其实这个问题可以这样思考,
1、多的指向一,加入学生和班级关系,是多对一,如果班级指向学生那么班级表就要为每个学生建立一个字段,大大浪费了空间。
2、要分清那个是多,那个是一。上图所示:一个讲师可以有多个关系,一个关系只能有一个讲师。因此讲师表是一,关系表是多。因此关系表指向讲师。
四、外键 foreign key
1、定义外键
注意:外键的作用很重要。
2、外键的sql语句
注意:此处有个comment列属性,意思是注释,相当于在列的旁边有个注释。
其实在创建表时还应该写一句:如果表存在就删除此表。然后再创建。
drop table if exists tbl_name;
外键的书写:先增加一个外键字段,用foreign key 指定该字段,reference 关联 表的字段。
3、定义外键后,如果想增加记录,首先看父表记录中有没有外键的记录。
问题2:那么还有一个问题,在一对多中,外键加在一中,还是多中?
很明显,外键一般存在多的表中,因为如果在一中,恐怕需要加无数个外键。
五、含有外键的删除操作
由于定义了外键,各表之间产生了关联,随意增加删除,都牵动着各表,删除操作更是复杂。
这就需要表的级联操作。
级联操作包含主表更新和主表删除。步骤:
1、首先你所创建的表要设置成运行级联操作。
修改外键设置:方法是,先删除外键,再添加外键。通过修改表完成
对于删除外键:
首先要知道外键名:通过语句查看
show create table tbl_name\G;
删除外键:
alter table tbl_name drop foreign key 外键名;
增加级联动作:
alter table tbl_name add foreign key (本表外键字段) references tbl2_name (外键字段) on delete set null;
on delete set null;删除主表时,将从表的外键设置为null.
上图可见在删除主表的记录时,从表外键被设置为null了。
on delete cascade;是级联删除,即:如果删除了主表记录内容,那么从表记录也被删除。
on update restrict; 表示更新时严禁操作。其中restrict 是默认值。
这是个默认值,不写也有。而我们的目标是在更新主表主键时,从表的外键值也跟着更改。
只能用 on update cascade;