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   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
上传中...
上传图片
插入图片