2 u012575301 u012575301 于 2014.11.20 10:32 提问

数据库中的关系表有什么作用 求大神解惑

其中一张表叫做关系表,它内部只有两个字段,但全是id,一个是cid,一个是uid
其中两个id都是其他表的主键 我只想问这样记录下他们的id有什么用 或者 说这样关系表存在的意义是什么啊 真心求大神解答

10个回答

caozhy
caozhy   Ds   Rxr 2014.11.20 10:38

实现了一个1:1的关系,这种设计可能是为了把一个表拆开,也可能有历史原因而需要保持原来表的结构不变而增加新的字段。

meiqingsong
meiqingsong   2014.11.20 10:47

可以实现1对多和多对多的关联
例如:a表为用户表 b表为角色表 c表为关系表 通过c表可以实现 一个用户有多个角色,一个角色有多个用户

zilaishuichina
zilaishuichina   Rxr 2014.11.20 10:49

这是为了实现 n:n的关系

举个例子,一个学生可以学n门课程,一个课程有n个学生选择

学生表 有 学生id
课程表 有 课程id
学生选课表 则为 id,学生id,课程id

u010792467
u010792467   2014.11.20 11:06

避免字段冗余,加入uid为用户表主键,cid为课程表主键,我需要用户时,查询用户表即可,需要课程表查询课程即可,需要查看那个用户选了那几门课程时,就可以通过uid关联到cid来查询,如果写在一块的话,字段太多,造成冗余...

q107770540
q107770540   Ds   Rxr 2014.11.20 11:29

这是为了实现多对多关系用的吧

jdjz123
jdjz123   2014.11.20 11:44

是这样的,关系表中某一个字段对应着另一个表的字段,他们是有意义的 ,不要从作用成上面的理解它,要从意义上去理解它,
用一个家庭来做比喻吧, 数据库是家庭, 里面有2张表,一张是父母表,一张儿女是表, 父母表有3个字段分别为ID ,姓名,年龄, 儿女表里面有 5个字段分别是 ID 姓名 年龄 父亲 母亲 , 你是不是 需要把 父亲关联到那张表的主键字段上去? 把你母亲关联到那张表的主键字段上去? ,然后这样还有一个约束, 就是 你父母表里面没有的数据,儿女表产生关联的2个字段是添加不进去的。

eshujiushiwo
eshujiushiwo   Rxr 2014.11.20 11:46

HI 题主你好
由于你的问题描述较为概括,我只能大致说下可能的用处。

用于做**关联**,至于为何要单独做一个表而**不是放到原表的字段中**,**可能的原因是**:新增字段**成本较高**,**业务不能收到影响**,如果是5.6以上的mysql 可以online ddl,以下的可以用percona的tools 但是可能贵公司的一些考虑,就放弃了在线新增 字段的想法。
故需要一个关联表来做关联。

希望能够有所帮助。

wgw335363240
wgw335363240   2014.11.20 11:53

关系表是为了维护两个实体对象的关系的,比如你说的uid应该是用户id,cid是班级id,每个学生都会属于一个班级,即:一个uid对应一个cid。在数据库设计的时候,可以百度下第一、第二和第三范式的设计思路,通常会建三个表:即:用户表User(主键为uid)、班级表(class)和用户班级表(uid与cid的对应关系),根据用户班级表就可以很容易找到一个 用户所属的班级,或者一个班级有哪些用户。关系表主要为了解决业务场景的需要而设立的。在大型系统中,由于用户班级表存储的都是整形数据,占用的空间相对较小,可以完全放到内存中来维护,缩短业务的查询时间。

liu13722785488
liu13722785488   2014.11.20 13:09

应该是为了两个表进行关联,对于数据库设计可能是为了满足范式的要求。同时对于一些查询统计之类的,从这个表应该更直观更方便。

juwuhen
juwuhen   2014.11.21 15:04

关系表主要就是用于表间多对多关联
举个简单的例子,用户与角色的多对多关系,在创建表的时候,用户表里一般不会考虑角色相关字段,角色表也一样。当我们需要建立2个表的对应关系的时候,这时就可以创建一个关系表,只有用户ID和角色ID两个字段,并作为联合主键,将2表关联起来

Csdn user default icon
上传中...
上传图片
插入图片