首页 新闻 搜索 专区 学院

数据库表的关系

0
悬赏园豆:10 [已解决问题] 解决于 2022-06-25 09:52

两张表,存在着一对多和多对一的关系,谁是主表,谁是从表

数据库表中字段自定义

一个项目类型下有多个项目 一个项目属于一个项目类型 一个项目标签下有多个项目 一个项目可以有多个项目标签

宋人鱼的主页 宋人鱼 | 初学一级 | 园豆:14
提问于:2022-06-24 14:45
< >
分享
最佳答案
0

要维护这些关系,两张表可不够用:

  1. 项目表
  2. 项目类型表
  3. 项目标签表
  4. 项目和项目标签关联表

项目 和 项目类型:多对一,所以在 项目表 中需要关联 项目类型表 的主键
项目 和 项目标签:多对多,所以需要有张第三方表保存它们之间的关联关系

收获园豆:5
飒沓流星 | 小虾三级 |园豆:1099 | 2022-06-24 15:42

三张表
1.项目表
2.项目类型表
3.项目标签表
项目和项目标签:可以是一对多,也可以是多对一的关系。
我项目表是小说表,项目标签表是类型,有后宫,玄幻这些类型,小说表引用项目标签表的id,获取类型,但我只能添加数据是一对一的关系,没有一对多的关系,意思是一个小说对应这一个类型,但我想要一个小说对应多个类型,这该怎么解决

项目表字段
id 编号
author 作者
title 书名
status 状态(0停更,1连载中)
typeid 类型id
names 类型名称(项目了下表中)

项目标签字段
id 编号
type 类型

宋人鱼 | 园豆:14 (初学一级) | 2022-06-24 16:12

@宋人鱼:

每添加一个关系 就在关联表中 新增一条记录,
查询的时候:

  1. 按照项目ID去查对应的标签ID列表
  2. 按照标签ID去查对应的项目ID列表
飒沓流星 | 园豆:1099 (小虾三级) | 2022-06-24 16:21

@飒沓流星: 你的意思是项目表和项目标签表不设置主外键关系,创建第四张表,然后第四张表,为主表,外键引用项目表和项目标签表。

宋人鱼 | 园豆:14 (初学一级) | 2022-06-24 16:40

@宋人鱼:

一个项目标签下有多个项目 一个项目可以有多个项目标签
要实现这个关系,项目表 和 项目标签表 没办法 设置主外键关系,那就成了一对一了
你现在明显是 多对多的 关系,只能创建一张关联表来维护这个多对多的关系,细品一下

飒沓流星 | 园豆:1099 (小虾三级) | 2022-06-24 17:01

@飒沓流星: 你说的这个我大概知道了,但我还有一个问题,就是你说要创建一张关联表,就像上面你发的图片一样,那这两个字段,要和项目表和项目标签表进行关联,关联表为主表。
对吧?

宋人鱼 | 园豆:14 (初学一级) | 2022-06-24 17:06

@宋人鱼:
我觉得主表和从表的概念一般在关联查询的时候才会用到 ,比如:

select a.*,b.* from A a left join B b on a.id = b.id

那么A就是主表,B就是从表

至于说关联表应该算是一个第三方表

飒沓流星 | 园豆:1099 (小虾三级) | 2022-06-24 17:16

@飒沓流星: 那我对项目表和项目标签表进行增删改操作,要不要用到关联表了?
如果要用到关联表
我要对项目表进行增删改查操作,那是否要三表连接查询,然后进行增删改查的操作。

宋人鱼 | 园豆:14 (初学一级) | 2022-06-24 17:23

@宋人鱼:
关联表的作用就是维护项目表和项目标签之间的关联关系

  1. 对这个关联关系进行变更的时候肯定要对这个关联表进行更新(你可以先删除,然后在新增)
  2. 如果只是单独修改项目表、项目标签表的信息,就不需要对关联表进行更新,因为关联关系并没有变化
  3. 查询的时候也是一样,按项目ID查项目标签列表 或者 按项目标签ID查项目列表
飒沓流星 | 园豆:1099 (小虾三级) | 2022-06-24 17:50

@飒沓流星: 好的,谢谢解答我的疑惑

宋人鱼 | 园豆:14 (初学一级) | 2022-06-25 09:51
其他回答(2)
0

没有绝对的主从表之分,看你需求。
举个例子:有两张表,Class表Student表,一个班有多个学生,Class表主键CIDStudent表外键,按照一般理解,Class是主表,Student是从表:
1.如果你查询班级信息,那么Class表就是主表
2.如果你查询学生信息,那么Student表就是主表

三人乐乐 | 园豆:4593 (老鸟四级) | 2022-06-24 15:11

好的,知道了。
但我现在要的是,一对多的关系怎么添加数据,或者多对一的关系怎么添加数据

支持(0) 反对(0) 宋人鱼 | 园豆:14 (初学一级) | 2022-06-24 16:14
1

那就是多对多吧,搞个中间关系表

收获园豆:5
会长 | 园豆:11835 (专家六级) | 2022-06-24 16:36

你的意思是,项目表和项目标签表不设置主外键关系,创建第四张表,然后第四张表为主表,然后引用项目表和项目标签表?

支持(0) 反对(0) 宋人鱼 | 园豆:14 (初学一级) | 2022-06-24 16:42

@宋人鱼: 是的,这应该是标准做法

项目Id 标签Id
1 1
1 2
2 1
2 2
支持(0) 反对(0) 会长 | 园豆:11835 (专家六级) | 2022-06-25 09:48

@会长: 好的,知道了谢谢

支持(0) 反对(0) 宋人鱼 | 园豆:14 (初学一级) | 2022-06-25 09:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册