You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

多个外键列vs多个连接表

数据库中,我们可能需要将一张表中的一个字段同时关联到多个表中的不同字段上,这时候我们可以使用多个外键列或者是多个连接表来解决这个问题。 例如,我们有一个订单表和两个物品表,分别是书和电子产品表,我们想让订单表可以连接到这两个物品表上,我们可以使用以下两个方式:

1、多个外键列

订单表中需要新增两个外键列分别对应书和电子产品表:

CREATE TABLE orders ( id INT PRIMARY KEY, book_id INT, electronic_id INT, ... FOREIGN KEY (book_id) REFERENCES books(id), FOREIGN KEY (electronic_id) REFERENCES electronics(id) );

优点:简单明了,易于查询。

缺点:当关联的表较多时,需要添加大量的外键列,使表结构复杂且维护不易。

2、多个连接表

订单表和书表需要新建一个连接表,订单表和电子产品表也需要一个连接表:

CREATE TABLE order_books ( order_id INT, book_id INT, ... PRIMARY KEY (order_id, book_id), FOREIGN KEY (order_id) REFERENCES orders(id), FOREIGN KEY (book_id) REFERENCES books(id) );

CREATE TABLE order_electronics ( order_id INT, electronic_id INT, ... PRIMARY KEY (order_id, electronic_id), FOREIGN KEY (order_id) REFERENCES orders(id), FOREIGN KEY (electronic_id) REFERENCES electronics(id) );

优点:关联表比较多时,可以让表结构更加简洁,易于查询。

缺点:需要新建多张连接表,相较于使用外键列的方式,可以增加表数量和复杂度。

综上所述,使用多个外键列或多个连接表都可以在一个表中关联到其他多个表上。具体选择哪种方式需要根据表的情况进行权衡和调整。

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

SQL FOREIGN KEY 约束- 保障表之间关系完整性的关键规则

`FOREIGN KEY` 是一张表中的字段(或字段集合),它引用另一张表中的主键。具有外键的表称为子表,具有主键的表称为被引用表或父表。以下是两个表的例子:**Persons 表**```textPersonID LastName FirstName ... "Orders" 表中的 "PersonID" 指向 "Persons" 表中的 "PersonID" 列。"Persons" 表中的 "PersonID" 列是 "Persons" 表中的主键。"Orders" 表中的 "PersonID" 列是 "Orders" 表中的外键。`FOREIGN KEY` 约束防止...

数据库顶会 VLDB 2023 论文解读:Krypton: 字节跳动实时服务分析 SQL 引擎设计

Unique Table:系统需要定义 Primary Key(PK),相同的 PK 只会存在一份,高版本覆盖低版本。3. Aggregate Table:和 Unique Table 类似,需要定义 PK,但是相同 PK 多行的合并算法不同可以自定义。 **架构**... Vs9eFFv2L9NTM16a564%3D)由于需要聚合的数据量比较大,线上对于这样的 Query Latency 要求比较高,所以我们采用了 MV 来加速这个 Query 的执行,具体做法如下:1. 为原始表创建两个 MV,一个按照天聚合,一个按...

达梦@记一次国产数据库适配思考过程|社区征文

若是通过**DM8工具去建表建字段或者带小写加双引号创建脚本**,出现双引号则在实际的sql方言中也需要加上双引号,否则执行sql会抛出视图或表不存在,字段名不存在的异常。![image.png](https://p9-juejin.byteimg... 最后需关闭连接close,释放资源->rs-ps-con. ```tk.mybatis:mybatis定制的第一大业务增强库。pagehelper:分页控件,mybatis定制的第二大业务增强库。## Q-A NO.3![image.png](https://p6-juejin.byteimg.com/t...

浅谈大数据建模的主要技术:维度建模 | 社区征文

度量和环境这两个概念构成了维度建模的基础。而所有维度建模也正是通过对度量和及其上下文和环境的详细设计来实现的。### 事实和维度在 Kimball 的维度建模理论中,**度量称为事实,上下文和环境则称为维度。**... 卖家等多个维度。在维度建模和设计过程中,可以根据需求描述或者基于现有报表,很容易地将信息和分析需求分类到事实和度量中。比如业务人员需求为“按照一级类目,统计本店铺上月的销售额情况”,“按照一级类自”...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

多个外键列vs多个连接表 -优选内容

SQL FOREIGN KEY 约束- 保障表之间关系完整性的关键规则
`FOREIGN KEY` 是一张表中的字段(或字段集合),它引用另一张表中的主键。具有外键的表称为子表,具有主键的表称为被引用表或父表。以下是两个表的例子:**Persons 表**```textPersonID LastName FirstName ... "Orders" 表中的 "PersonID" 指向 "Persons" 表中的 "PersonID" 列。"Persons" 表中的 "PersonID" 列是 "Persons" 表中的主键。"Orders" 表中的 "PersonID" 列是 "Orders" 表中的外键。`FOREIGN KEY` 约束防止...
表管理
编辑表结构 不支持在系统库上编辑表。 由于 DDL 执行有时间限制,当表过大时,可能会执行失败,因此建议您不要在数据库工作台 DBW 做大表的结构或索引调整。 当存在索引或外键设置时,无法对列进行修改。如需调... 数组可以容纳同一种数据类型的多个值,就像一个表或集合。如果您想在一行中存储类似的多个条目,可以勾选数组。 可空 (可选)按需设置是否勾选可空。表示是否可以在该列中插入 NULL 值。当勾选可空时,不支持设置主键...
数据结构
取值如下: true:表示预检查项通过。 false:表示预检查项未通过。 true Level String 预检查项未通过时,预检查项的等级,取值如下: Error:表示在预检查项的等级为若不通过则预检查不通过。 Warning:若不通过则不影响整个预检查是否通过。 Error Name String 检查项的名称。 运行环境检测 Desc String 检查项的描述。 运行环境检测 Details String 检查项结果的详情信息。 连接或展开通配符失败,请检查连通性或重试 Conve...
数据库顶会 VLDB 2023 论文解读:Krypton: 字节跳动实时服务分析 SQL 引擎设计
Unique Table:系统需要定义 Primary Key(PK),相同的 PK 只会存在一份,高版本覆盖低版本。3. Aggregate Table:和 Unique Table 类似,需要定义 PK,但是相同 PK 多行的合并算法不同可以自定义。 **架构**... Vs9eFFv2L9NTM16a564%3D)由于需要聚合的数据量比较大,线上对于这样的 Query Latency 要求比较高,所以我们采用了 MV 来加速这个 Query 的执行,具体做法如下:1. 为原始表创建两个 MV,一个按照天聚合,一个按...

多个外键列vs多个连接表 -相关内容

同步至火山引擎版 MySQL

涉及外键依赖的表,需要同时同步,否则将导致数据同步失败。 单任务中表的数量建议不超过 2 万,库的数量不超过 1000 个。当有大量库表需要同步时,建议拆分为多个任务。 目标库限制 数据库版本:当前支持 5.7 和... 表中选择目标只读节点。 说明 在实例中创建了只读节点,且节点类型选择只读节点时,支持配置此参数。 数据库账号 输入目标实例的数据库账号。 数据库密码 输入目标实例数据库账号对应的密码。 测试链接 单击测试...

表管理

编辑表结构 不支持在系统库上编辑表。 由于 DDL 执行有时间限制,当表过大时,可能会执行失败,因此建议您不要在数据库工作台 DBW 做大表的结构或索引调整。 当存在索引或外键设置时,无法对列进行修改。如需... 选择是否设置自增列。 主键 (可选)选择是否设置主键。当选择设置主键时,不支持设置允许空值。如果需要选择多个列,顺序将按照序号从小到大排列。 说明 当需要删除某一列时,您可以选择目标列,单击删除列。 在索引页...

表管理

编辑表结构 不支持在系统库上编辑表。 由于 DDL 执行有时间限制,当表过大时,可能会执行失败,因此建议您不要在数据库工作台 DBW 做大表的结构或索引调整。 当存在索引或外键设置时,无法对列进行修改。如需... 选择是否设置自增列。 主键 (可选)选择是否设置主键。当选择设置主键时,不支持设置允许空值。如果需要选择多个列,顺序将按照序号从小到大排列。 说明 当需要删除某一列时,您可以选择目标列,单击删除列。 在索引页...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

干货 | 基于ClickHouse的复杂查询实现与优化

其基本的查询模式可分为两个阶段。第一阶段,Coordinator在收到查询后,将请求发送给对应的Worker节点。第二阶段,Worker节点完成计算,Coordinator在收到各Worker节点的数据后进行汇聚和处理,并将处理后的结果返回。... 化的代价,因此查询的性能会受到影响。特别是当Join采用Hash Join时,如果右表是一张大表,构建也会比较慢。针对构建问题,近期社区也进行了一些右表并行构建的优化,数据按照Join key进行Split来并行地构建多个Hash ...

[数据库系统] 业界式存储浅析

存的优化器和执行器;1. 使用有重叠的projections 来提升性能和获取高可用;1. 使用snapshot isolation,避免2PC 和 query时加锁;### 数据模型C-Store 支持标准的关系型数据模型,一个数据库包含多张表,每张... 包含该逻辑表中的一个或者多个attributes。一个projection也可以包含其他表的任意数量的attributes,只要有一个外键链接绑定的表到包含这个attribute的表。![image.png](https://p9-juejin.byteimg.com/tos-cn...

分布式数据库TiDB的设计和架构

对外暴露 MySQL 协议的连接 endpoint,负责接受客户端的连接,执行 SQL 解析和优化,最终生成分布式执行计划。TiDB 层本身是无状态的,实践中可以启动多个 TiDB 实例,通过负载均衡组件(如 LVS、HAProxy 或 F5)对外提供... 两个城市的三个数据中心互联互通,如果一个数据中心发生故障或灾难,其他数据中心可以正常运行并对关键业务或全部业务实现接管。相比同城多中心方案,两地三中心具有跨城级高可用能力,可以应对城市级自然灾害。TiDB...

同步至火山引擎版 MySQL

涉及外键依赖的表,需要同时同步,否则将导致数据同步失败。 单任务中表的数量建议不超过 2 万,库的数量不超过 1000 个。当有大量库表需要同步时,建议拆分为多个任务。 目标库限制 数据库版本:当前支持 5.7 和... 表中选择云数据库版 MySQL 的目标实例。 说明 您也可以通过实例 ID 或名称搜索目标实例。 数据库账号 输入目标实例的数据库账号。 数据库密码 输入目标实例数据库账号对应的密码。 测试链接 单击测试链接,验证...

基于 Apache Calcite 的多引擎指标管理最佳实践|CommunityOverCode Asia 2023

其实就是用 SQL 去查一些库表列。下面根据上文提出的三个问题,介绍一些指标管理的常见方式。 **1.1 整数除法在不同引擎的差异**SQL 查询在不同引擎之间是存在差异的,例如整数的除法。举一个点击率的例子,如下图所示,点击率等于点击数除以曝光数,但业务通常会将点击数、曝光数这两个指标定义为 int,这就会导致使用 Presto 计算时查出 int 结果,而使...

创建并启动数据订阅任务

请参见开启 DTS 连接。 订阅前准备白名单与访问权限:目标端的实例的接入方式选择的是火山引擎 ECS 自建时,且实例开启了访问限制,那么在创建数据库传输任务前,您需要将 DTS 服务器 IP 地址(100.64.0.0/10)添加至实... 表示仅在本账号内实现数据传输。 跨账号:选择跨账号时,表示将实现两个账号间的数据传输。 说明 在进行跨账号传输数据时,您需要通过目标端所在的账号登录数据库传输服务 DTS 控制台。 跨账号进行数据传输前,您需要...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询