宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

1、一对一可以两个实体设计在一个数据库中l例如设计一个夫妻表,里面放丈夫和妻子
2、一对多可以建两张表,将一这一方的主键作为多那一方的外键,例如一个学生表可以加一个字段指向班级班级与学生一对多的关系)

3、多对多可以多加一张中间表,将另外两个表的主键放到这个表中(如教师和学生就是多对多的关系)


关于外键的设置:
首先,外键引用的那个列在主表中必须是主键列或者唯一列。
所以1:n的肯定把外键建立在n的那张表上。
1:1,一般要看谁是主表,谁是附属表,外键当然建立在附属表中。
n:m的情况,需要建立一个关系表,两个原表和其关系分别是1:n,1:m

关于主外键及多表联系的进一步理解:

主外键的存在是依托两个实体之间的关系而存在的; 

比如班级与学生的关系: 

一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系; 

那么设计数据库的时候就应该在学生表内存放班级的ID作为外键,为什么不在班级表内放学生呢? 

因为,你想一想班级表内如果放学生那么记录可能就是这样: 

1班ID 1班 xx同学id 

1班ID  1班 xx同学id 

.. 

这是不允许的,班级表内班级为主键,是唯一的不允许相同记录的; 

下面简单讲下大概建成的表结构 

–建班级表 

create table class 

classid int primary key,–定义班级ID为主键 

classname varchar15) 

–建学生表 

create table students 

studentid int primary key,–定义学生ID为主键 

classid int ,–外键值,跟班级表classid 属性类型相同 

stuname varchar20),–学生姓名 

—定义外键  

foreign keyclassid) references classclassid) –本表classid是基于class表classid的外键 

——— 

如上定义了主外键后,两个表间的关系就是一对多的关系了,并且学生表内的classid必须依托班级表的classid存在,也就是说外键必须要主键存在的时候才能创建,例如: 

–在班级表为空的情况往学生表插入一条记录是不允许的: 

insert into studentsstudentid,classid,stuname)values1,1,’小明’) 

系统会抛出异常提示主键表班级表内班级ID不存在这样是不允许插入的; 

必须要先往班级表内插入一条记录: 

insert into classclassid,classname)values1,’一班’) 

后才能执行插入前面一条往学生表插入信息的语句..