博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库在一对一、一对多、多对多怎么设计表关系
阅读量:5947 次
发布时间:2019-06-19

本文共 1184 字,大约阅读时间需要 3 分钟。

hot3.png

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 varchar(15) 

--建学生表 

create table students( 

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

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

stuname varchar(20),--学生姓名 

---定义外键  

foreign key(classid) references class(classid) --本表classid是基于class表classid的外键 

--------- 

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

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

insert into students(studentid,classid,stuname)values(1,1,'小明') 

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

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

insert into class(classid,classname)values(1,'一班') 

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

转载于:https://my.oschina.net/yzbty32/blog/3029141

你可能感兴趣的文章
部署Exchange 2010(二)首台MailBox服务器
查看>>
用好这块风水宝地--开博之语
查看>>
Jquery插件开发
查看>>
产品配置管理相关通知
查看>>
数据库相关算法 之 xxHash
查看>>
牛顿法/递归法实现开方的函数功能
查看>>
手势模型和Angular Material的实现
查看>>
Java转换txt文件编码(GBK转UTF-8)
查看>>
Redis-使用记录
查看>>
APICloud 微信授权登录
查看>>
Java Web开发自学笔记一:环境(tomcat、jdk的选择和安装)
查看>>
Cakephp requestAction用法
查看>>
疯狂Activiti6.0连载(13)DMN的XML规范
查看>>
2.Linux上安装MySQL 5.5 rpm
查看>>
网站资源
查看>>
dubbo提供者出现不明外网ip注册的问题
查看>>
Mac版本UltraEdit取消自动更新检查
查看>>
HashMap之Hash碰撞冲突解决方案及未来改进
查看>>
OpenCV3 - 形态转换
查看>>
RTP
查看>>