2 qq 39586869 qq_39586869 于 2017.09.07 13:13 提问

数据库表的一对多,多对一关系

现在还是不太明白这关系,只是知道如果是一对多的话,外键是应该加在多方的这张
表中,但是多对一的时候,外键是加在什么地方呢?还有多对多的时候,外键怎么加?
我们在公司中平常用到的关系表是怎么关系的?

9个回答

qq_34926773
qq_34926773   2017.09.07 13:20
已采纳

一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系;
那么设计数据库的时候就应该在学生表内存放班级的ID作为外键
为什么不在班级表内放学生呢?
因为,你想一想班级表内如果放学生那么记录可能就是这样:
1班ID 1班 xx同学id
1班ID 1班 xx同学id
这是不允许的,班级表内班级为主键,是唯一的不允许相同记录的;
理解了一对多的关系那么反过来理解多对一就简单了

oyljerry
oyljerry   Ds   Rxr 2017.09.07 13:18

需要约束的地方就加外键,一对多,跟多对一不就是反的,外键还是加载多的地方。

Java_Hadoop
Java_Hadoop   2017.09.07 15:22

一对一的话外键加在任何一方都可以. 例如在中国丈夫和妻子的关系就是典型的一对一的关系,无论是在丈夫还是妻子一侧进行约束效果都是一样,
不过不要忘记 在任意一方进行约束的时候,应该给这个外键加上 unique 属性,也就是唯一性
多对多的时候需要借助第三方表,进行关系的维护 其他两张表的主键作为第三张表的 复合主键 下边这个是我建立的Teacher,student表之间的多对多关系 这个就是第三方表

CREATE TABLE t_s(
t_id INT,
s_id INT,
PRIMARY key(t_id,s_id) -- 复合主键
)

如果还不太明白的话,可以直接私聊我

YangMing_number
YangMing_number   2017.09.07 15:41

manytoone onetomany

qq_38005982
qq_38005982   2017.09.07 13:20

首先请你告诉我多对一和一对多有什么区别?多对多的时候可以没有外键,我们建一个桥表,把两个表对应的ID放到一起就行

qq_23292875
qq_23292875   Rxr 2017.09.07 13:20

搞个中间表,把多对多拆成两个一对多啊

songwz123
songwz123   2017.09.07 14:19

一个 班级里面有很多个学生 一对多

很多个学生组成一个班级 多对一

zhaofuqiangmycomm
zhaofuqiangmycomm   2017.09.07 15:03

很多公司都不用外键了,外键对表关系影响较大,都是直接在A表中存个B表的主键,这一列叫关系列,A通过这个就可以关联找到B,多对多需要建立中间表

yalishadaa
yalishadaa   2017.09.07 15:19

使用中间表关联两张表,表示一个多对多的关系,外键表示一种约束,不由多对一或者一对多决定,外键能不用就不要用

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
数据库中表关系(一对多,多对多,一对一)
一对多关系 一对多关系是最普通的一种关系。在这种关系中,A 表中的一行可以匹配 B 表中的多行,但是 B 表中的一行只能匹配 A 表中的一行。例如,publishers 和 titles 表之间具有一对多关系:每个出版社出版很多书,但是每本书名只能出自一个出版社。 只有当一个相关列是一个主键或具有唯一约束时,才能创建一对多关系。 多对多关系 在多对多关系中,A
数据库一对一、一对多、多对多关系
数据库一对一、一对多、多对多关系      本来数据库一对一、一对多、多对多关系并不复杂,但是最近在理解的时候感觉又感觉多了写新意,所以现在在来总结一下吧 一、首先给出三种关系的实例 1、一对一关系实例    * 一个人对应一张身份证,一张身份证对应一个人 2、一对多关系实例    * 一个班级拥有多个学生,一个学生只能够属于某个班级 3、多对多实例    * 一个学生可以
数据库一对一、一对多、多对多设计
做一个项目,必然是少不了数据库设计的!在学习阶段,基本都是单表。然而在实际开发过程中,一对多,多对多的表处处都是!简单整理一下,一对多,多对多表如何设计整理一下思路:        数据库实体间有三种对应关系:一对一,一对多,多对多。        一对一关系示例: 一个学生对应一个学生档案材料,或者每个人都有唯一的身份证编号。        一对多关系示例:
数据库的关系表:一对多、多对多实例
一个项目对应多个学生 一个学生对应多个项目(多对多关系) 项目表 学生表 项目号(主) 学生号(主) 学生-项目表 项目号(外) 学生号(外) 实现多对多关系,必须要第三表来操作,且它们都属于外键。 一个导师对应多个项目 一个项目对应一个老师(一对多关系) 导师表 项目表
总结一下数据库的 一对多、多对一、一对一、多对多 关系
关联映射:一对多/多对一 存在最普遍的映射关系,简单来讲就如球员与球队的关系; 一对多:从球队角度来说一个球队拥有多个球员 即为一对多 多对一:从球员角度来说多个球员属于一个球队 即为多对一 数据表间一对多关系如下图: 关联映射:一对一 一对一关系就如球队与球队所在地址之间的关系,一支球队仅有一个地址,而一个地址区也仅有一支球队。 数据表间一对一关系的表现
hibernate多表操作之一对多的双向关联
实例:Classes与Student    一对多,相比一对多的单项关联,这回,能在Student里面也能找到学生     持久化类:Classes 班级,一个班级有多个学生,通过集合来建立关系  private Long cid; //标示符属性  private String name;  //一般属性  private String description;
hibernate 一对多 多对一 关系的理解
1、单向多对一和双向多对一的区别? 只需要从一方获取另一方的数据时 就使用单向关联 双方都需要获取对方数据时 就使用双向关系 部门--人员 使用人员时 如果只需要获取对应部门信息(user.getdeptarment()) 不需要 从部门下的人员信息时,就配置成单向 多对一 使用部门时 如果只需要获取部门下人员信息(deptartmanet.getusers()) 不
MyBatis 一对多和多对一的关系
配置和jar包 MyBatisConfig和MyBatisUtils(SqlSessionFactory工厂)配置和一对一配置一样,详情见一对一配置,架包也一样 实体类 public class Classes { private int cid; private String cname; private String cdate; List stus; pu
【hibernate】多对一,一对多关系
多对一映射:在说一对一外键单向映射中,在“主”端维护的时候用的是 标签,里面添加的unique=”true” 属性来约束的。这里不添加unique属性的时候就变成多对一的映射关系了。 “主”端: 多的一端 // column 数据中的别名 cascade 表示级联关系 通常用在多对一 ,和多对多的
Hibernate中一对多和多对一关系
http://blog.sina.com.cn/s/blog_4b5bc0110100z483.html 1、单向多对一和双向多对一的区别? 只需要从一方获取另一方的数据时 就使用单向关联 双方都需要获取对方数据时 就使用双向关系 部门--人员 使用人员时 如果只需要获取对应部门信息(user.getdeptarment()) 不需要 从部门下的人员信息时,就