首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我应该在哪里存放外键?

外键是关系数据库中用于建立表与表之间关联关系的一种约束。它用于保持数据的完整性和一致性,确保关联表之间的数据一致性。

在关系数据库中,外键通常存放在子表中。子表是与主表建立关联的表,它包含主表的主键作为外键。通过在子表中存放外键,可以实现表与表之间的关联,确保数据的一致性。

外键的存放位置取决于关联表之间的关系类型。常见的关系类型有一对一关系、一对多关系和多对多关系。

  1. 一对一关系:如果两个表之间存在一对一关系,可以将外键存放在任意一方的表中。在这种情况下,外键可以存放在主表或者子表中,具体取决于数据的访问模式和查询需求。
  2. 一对多关系:在一对多关系中,外键通常存放在子表中。子表包含主表的主键作为外键,用于建立与主表的关联。这样可以确保每个子表记录都与主表中的记录关联起来。
  3. 多对多关系:在多对多关系中,需要使用中间表来建立关联。中间表包含两个主表的主键作为外键,用于建立两个主表之间的关联。在这种情况下,外键存放在中间表中。

外键的存放位置也可以根据具体的业务需求和性能优化考虑进行调整。例如,如果某个外键在查询中频繁使用,可以将其存放在需要频繁查询的表中,以提高查询性能。

腾讯云提供了多个与数据库相关的产品,例如云数据库 TencentDB、分布式数据库 TDSQL、数据库迁移服务 DTS 等。您可以根据具体需求选择适合的产品进行数据存储和管理。

更多关于腾讯云数据库产品的信息,请访问腾讯云官方网站:https://cloud.tencent.com/product/cdb

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

数据库在一对一、一对多、多对多怎么设计表关系

1、一对一可以两个实体设计在一个数据库中l例如设计一个夫妻表,里面放丈夫和妻子 2、一对多可以建两张表,将一这一方的主键作为多那一方的,例如一个学生表可以加一个字段指向班级(班级与学生一对多的关系...) 3、多对多可以多加一张中间表,将另外两个表的主键放到这个表中(如教师和学生就是多对多的关系) ---- 关于的设置: 首先,引用的那个列在主表中必须是主键列或者唯一列。...所以1:n的肯定把建立在n的那张表上。 1:1,一般要看谁是主表,谁是附属表,当然建立在附属表中。...,并且一个学生只能属于一个班级,这就是一对多的关系; 那么设计数据库的时候就应该在学生表内存放班级的ID作为,为什么不在班级表内放学生呢?...) --本表classid是基于class表classid的 ) --------- 如上定义了主外后,两个表间的关系就是一对多的关系了,并且学生表内的classid必须依托班级表的classid

4.5K20

数据仓库专题(10)-文本事实和杂项维度

一张事实表中可能会存在好几个类似的字段,如果作为事实存放在事实表中,会导致事实表占用空间过大;如果单独建立维度表,关联到事实表,会出现维度过多的情况;如果将这些字段删除,会有人不同意。...这 时,我们通常的解决方案就是建立杂项维度,将这些字段建立到一个维度表中,在事实表中只需保存一个。几个字段的不同取值组成一条记录,生成代理,存 入维度表,并将该代理保存入相应的事实表字段。...这些字段看似属于事实表中的事实,但是它们又不是、度量事实或者退化维度。 通常,不太建议将这些文本事实字段建立到事实表中,而应该在维度表中给它们找到适当的位置。...建立单独的小维度表是比较容易的方式,但是为增加事实表中的个数。这样的维度比较多时,我们可以建立杂项维度表。下面列举了不同情况的一些说明。...1.如果事实表中的维度外已经很多,如20个左右,那么最好建立杂项维度表。 2.理想情况下,杂项维度的记录数不要超过10万条。如果建立了杂项维度记录过多,可以考虑拆分成独立的维度或者其他杂项维度。

1.2K20

名不副实的数据库类型

有个项目建了很多表的关联,并且还写了不少关联多个表的复杂 SQL,想秀秀技能,结果被 DBA 各种 diss,说这种和关联查询不适合用关系数据库,性能可能会很差,要打回去整改,感觉项目又要延期了...说起那个叫 MongoDB 的文档数据库就郁闷,你出来走两步,就一存 json 数据的,凭啥是文档数据库,也没看到你哪里适合存放 word、PDF 文档啊。...图片 老板,还有 DBA 兄弟,先吐这么多啊,绝对不会删库跑路的,其他人就不敢保证了,你们保重啊!...总结 图数据库不是用来管理图片,是用来管理对象关联关系,在社交、风控等领域用得上; 关系型数据库的很多坑,在多表关联也很吃力,尤其是执行计划用不上合理的索引时; MySQL 的2000w记录上限说法已经过时了...,尤其是那个按B树高度的解释,关键还是看数据结构、SQL 语句和硬件性能,同时定期清理或归档历史数据; 文档数据库不是用来存文档的,是用来存放 JSON 格式的数据,适合比较灵活的 schema 设计;

85970

深入浅出后端开发(MySQL篇)

数据库存放数据,就是将无序的数据按一定的规律和顺序摆放存入,不同的数据库特点、性能不同....存储引擎 事务 存储过程 触发器 安全策略 数据库服务器安全 ---- MySQL&PHP结合应用 目前正在进行这方面的实践,稍后会进行此处的更新. ---- 数据库思想 关联 & a 表有的数据...b 表也必须要有 b 依赖 a 所以 b 表的数据不给删除 必须要 a 的删除了 b 才能删除 反正 就是维护两张或者多张表的数据一致性 关连 是两张或多张表的逻辑关系 关连不需要 关连只是描述逻辑...它说是 你想成关连字段就行了 不是说关连就一定不能是 关连字段也可以是 但是尽量不要是 文章 -> 帐户 评论 -> 帐户 这个时候有约束的话 帐户就不给删除...如果您觉得还不错的话~可以点个喜欢鼓励哦. 如果您想和我一起学习,请毫不吝啬的私信我吧~ 介个是的个人博客,欢迎参观哦~

1.5K180

二分法去查找已知有序数组中数

接下来将会讲述在写这个代码时所遇到的错误。...出现的问题: 1sizeof不会使用;sizeof是求字符长度他是一个求值的东西要求的东西应该在后面用()弄起来 2数组最后一位的下标是sz-1; 3mid需要时刻变化所以应该放在while中 4 if...中一定要是==这才是判断,=是赋值 5这里不应该在while里套一堆if应该遵守if的用法将最后一个if放到循环 6要有逻辑性left=mid+1才能跳出循环而left=mid时当k找不到就会死循环因为...left会一直=right 以上就是作为一个初学者遇到的问题,如果有错请大家帮我改正 其实当初学者代码遇到错误时,不要害怕和不经思考;我们首先要通过编译器给出的警告来判断;而当代码本身没有语法错误,但是却陷入死循环...,特别是有关与数据问题(如我前文中的代码)我们要学会积极使用f10去调试,并用监视窗口去看哪里的数据。

8010

数据库设计指南之我见

设计4原则 · 为关联字段创建。 · 所有的都必须唯一。 · 避免使用复合。 · 总是关联唯一的字段。...作为一条规则,通常对逻辑主键使用唯一的成组索引,对系统(作为存储过程)采用 唯一的非成组索引,对任何列采用非成组索引。不过,索引就象是盐,太多了菜就篌了。...—gbrayton 对外的看法是,应该只在开发和测试环境中建,对于生产环境,还是取消所有比较好,主要是在生产环境下,数据量比较大,取消可以提高增删改的效率,数据之间的约束在程序中维护...在开发环境和测试环境中保留就是为了保证程序在操作数据库时遵守约束,只要在开发测试环境中程序对数据库的操作是正确的,那么在生成环境没有约束的情况下也是仍然是正常的。...—Peter Ritchie 不是完全不同意这个观点,约束会降低数据更新时的执行效率,约束应该在开发和测试环境的数据库中存在,在生产环境中,只需要主键即可,其他的约束、check约束都是浮云,全部去掉

37610

汇编语言中断及外部设备操作篇--06

直接写址表的优势 中断及其处理 中断的概念 8086的内中断 中断处理程序 案例:系统中的0号中断 中断过程 编制中断处理程序 中断处理程序及其结构 编制中断处理程序——以除法错误中断为例 do0子程序应该放在哪里...:由外部设备发生的事件引起的中断 中断处理过程 PC机键盘的处理过程 PC机键盘的处理过程 键盘上的扫描码(通码) PC机键盘的处理过程——引发中断 PC机键盘的处理过程——执行中断例程 输入 'a...执行中断程序前需要先保护现场,这点很重要,主要是保存标志寄存器的状态和当前程序的地址 ---- 编制中断处理程序 中断处理程序及其结构 ---- 编制中断处理程序——以除法错误中断为例 ---- do0子程序应该放在哪里...---- 程序框架 安装程序就是把程序代码送入到先前指定存放程序的内存空间中去,然后更改中断向量表0号表项存放的0号中断程序的地址即可。...:由外部设备发生的事件引起的中断 ---- 中断处理过程 ---- PC机键盘的处理过程 PC机键盘的处理过程 ---- 键盘上的扫描码(通码) ---- PC机键盘的处理过程——引发中断

72710

-数据仓库维度建模

从最低的粒度级别来看,事实表行对应一个度量事件,例如电商行业中的订单表,每完成一个订单,就会在表中增加一条记录,实际上就是业务上的流水表,表内不存放实际的内容,是一堆维度表主键的集合,通过这些维度主键可以对应到维度表中的一条记录...维度表的主键可以作为与之关联的任何事实表的,这里的主键和可以是实际表中创建的,也可以是物理意义上的虚拟主键和。 维度表通常是比较宽、扁平型的非规范表,包含大量的低粒度属性。...公共处理逻辑下沉及单一 越是底层公用的处理逻辑越应该在数据调度依赖的底层进行封装与实现,不要让公用的处理逻辑暴露给应用层实现,不要让公共逻辑多处同时存在。...比如客户信息就只有一份) 结构清晰(表结构一目了然) 便于做OLAP分析(数据分析用起来会很方便) 增加使用成本,比如查询时要关联多张表 数据不一致,比如用户发起购买行为的时候的数据,和我们维度表里面存放的数据不一致

1K10

数据库设计

设计 4 原则 * 为关联字段创建。 * 所有的都必须唯一。 * 避免使用复合。 * 总是关联唯一的字段。...作为一条规则,通常对逻辑主键使用唯一的成组索引,对系统(作为存储过程)采用唯一的非成组索引,对任何列[字段]采用非成组索引。不过,索引就象是盐,太多了菜就咸了。...大多数数据库都索引自动创建的主键字段,但是可别忘了索引,它们也是经常使用的,比如运行查询显示主表和所有关联表的某条记录就用得上。...但别忘了索引字段,它们在你想查询主表中的记录及其关联记录时每次都会用到。...保存常用信息 让一个表专门存放一般数据库信息非常有用。常在这个表里存放数据库当前版本、最近检查/修复(对 FoxPro)、关联设计文档的名称、客户等信息。

99780

数据库设计经验谈

设计 4 原则 * 为关联字段创建。 * 所有的都必须唯一。 * 避免使用复合。 * 总是关联唯一的字段。...作为一条规则,通常对逻辑主键使用唯一的成组索引,对系统(作为存储过程)采用唯一的非成组索引,对任何列[字段]采用非成组索引。不过,索引就象是盐,太多了菜就咸了。...大多数数据库都索引自动创建的主键字段,但是可别忘了索引,它们也是经常使用的,比如运行查询显示主表和所有关联表的某条记录就用得上。...但别忘了索引字段,它们在你想查询主表中的记录及其关联记录时每次都会用到。...保存常用信息 让一个表专门存放一般数据库信息非常有用。常在这个表里存放数据库当前版本、最近检查/修复(对 FoxPro)、关联设计文档的名称、客户等信息。

95740

答案:Excel VBA编程问答33题,继续……

Keycode参数仅标识密钥,你必须使用Shift参数来确定是否按下Shift。 4.KeyDown事件过程中的代码如何取消按键? 通过将KeyCode参数设置为0。...7.如何防止用户通过制表将焦点移到控件上? 将控件的TabStop属性设置为False。 8.如何命名事件过程? 通过使用对象名称、下划线和事件名称。...按住Shift。 12.什么是数据验证? 数据验证是确保用户不会输入无效数据的过程,例如在输入数字时应输入文本。 13.你应该在何处放置工作簿级别事件的事件过程?...除了测试程序,没有其他方法可以找到bugs。 24.是非题:最终用户必须具有已安装的Excel版本才能运行Excel应用程序。 不一定。...25.自定义VBA类的代码放在哪里? 在一个类模块中。 26.是非题:自定义VBA类可以包含可视化界面。 错。自定义VBA类不能包含视觉化元素。 27.如何创建只读属性?

4.2K20

分享8个 VSCode 进阶级快捷,提升你的开发效率

个人而言,每当我看到同事伸手拿鼠标移动一行或切换选项卡时,就会感到内心有些沮丧。想想您可怜的肩膀!...在上一篇文章中,分享过一些常用的快捷,没看过的小伙伴们,可以点击以下链接,快速复习下: 分享11个常用的VSCode快捷,让你编码更高效 1、移动行或选择 将当前选定的内容上移或下移一行 Linux...懂你,伙计。成为你一直命中注定要成为的超级复制粘贴工程师。...一个目录接一个目录,上下滚动,“它在哪里?!就知道它就在这里,伙计!”无望。你放弃了你的梦幻应用程序,转行成了一个卷心菜农民。 或者,省去麻烦,让你的好伙伴VS Code来为你找到它。...5、查找符号 使用模糊搜索在当前编辑器会话中查找类、函数或属性的位置 Linux / Windows: Ctrl + T Mac: Cmd + T 最佳实践指出,你不应该在单个文件中拥有42,069行代码

54920

Mysql存储引擎

存储限制 64TB 有 有 没有 事务安全 支持 锁机制 行锁(适合高并发) 表锁 表锁 表锁 B树索引 支持 支持 支持 支持 哈希索引 支持 全文索引 支持(5.6版本之后) 支持 支持...约束 MySQL支持的存储引擎只有InnoDB,在创建的时候,要求父表必须有对应的索引,子表在创建的时候,也会自动的创建对应的索引。...SET NULL则表示父表在更新或删除时,子表对应字段值被设置为NULL(不过要求该允许为空) 不写ON DELETE ON UPDATE 默认为RESTRICT级别。...表中数据如下:  信息可以通过两种方式查看:  show create table sun_innodb; show index from sun_innodb; 验证级联删除与更新:  ...1.2 MyISAM MyISAM 不支持事务、也不支持,优势就是访问的速度快,以 SELECT、INSERT为主的应用基本上都可以使用这个引擎来创建表。

15520

企图变秃变强的第二天

很明显了,没找到主键,说到主键,想起来另一个概念,。温习一下。 用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。...觉得这篇文章讲的比较形象: 主键 2.list优雅的判空 if(list == null){ //意味着list在堆中不存在,根本没有地址,如果此时操作list会报空指针异常。...可以把代码部署到服务器,以前没做过,今天尝试了一下,感觉,有点刺激… 步骤就是先去Jenkins大老爷的后台,找到Build Now,大哥给我说,如果代码编译出错的话,有一个红色的小点点,在本地看一眼代码哪里出错了...编译成功是一种说不上来的颜色,的颜色库比较匮乏,暂且叫蓝色。之后就是去远程仓库下执行脚本。阳哥告诉sh和./都可以执行,因为懒,所以就./ +脚本名吧,这时候就等着服务器的重启服务就好了。...4.去服务器扒日志 当非本地环境代码出现异常,本地没有日志,就可以通过XFTP等工具去log文件夹下找对应服务的log文件,下载到本地,查看是哪里出了异常。

32243

Django 1.10中文文档-第一个应用Part6-静态文件

除由服务器生成的HTML文件,网页应用一般还需要提供其它必要的文件——比如图片、JavaScript脚本和CSS样式表。这样才能为用户呈现出一个完整的网站。...Django有一个STATICFILES_FINDERS的查找器,它会告诉Django从哪里查找静态文件。...这样你的style.css样式表应该在polls/static/polls/style.css。...添加背景图片 下一步,我们将创建一个子目录来存放图片。在polls/static/polls/目录中创建一个images子目录。在这个目录中,放入一张图片background.gif。...background: white url("images/background.gif") no-repeat right bottom; } 重新加载http://localhost:8000/polls/ ,你应该在屏幕的右下方看到载入的背景图片

1.5K70

人工智能与软件架构

这里面就有一个情况,如果数据库中没有建立,如何把这种实际的关系找出来,我们就用这个例子解释一下机械智能和实现意图智能的方法: (1)用规则的方式查找关系。...首先要定义规则,关联的规则包括字段类型一致、长度一致、包含相同数据等等,然后在所有数据中遍历,进行匹配。...这种方式需要有完整的数据,而且是否关系的判断规则往往有些模糊,在没有得到全量数据时有一定局限性; (2)用统计学方法查找关系。...Python 是最好的语言了),相关系数高的说明特征类似,认定为关系。...需要说明的事,在上述例子中,简化了不少动作,实际上最开始还找出来很多不是关系的字段,例如 createTime,我们还要把这种噪音字段的特征训练出来,剔除噪音。

1.9K110

【建议收藏】MySQL 三万字精华总结 + 面试100 问(一)

大家好,又见面了,是全栈君。 ❝ 写在之前:不建议那种上来就是各种面试题罗列,然后背书式的去记忆,对技术的提升帮助很小,对正经面试也没什么帮助,有点东西的面试官深挖下就懵逼了。...InnoDB 现在是 MySQL 默认的存储引擎,支持事务、行级锁定和 文件存储结构对比 在 MySQL中建立任何一张数据表,在其数据目录对应的数据库目录下都有对应表的.frm 文件,.frm 文件是用来保存每个数据表的元数据...查看MySQL 数据保存在哪里:show variables like 'data%' MyISAM 物理文件结构为: .frm文件:与表相关的元数据信息都存放在frm文件,包括表结构的定义信息等...这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一; InnoDB 支持,而 MyISAM 不支持。...对一个包含的 InnoDB 表转为 MYISAM 会失败; InnoDB 是聚簇索引,MyISAM 是非聚簇索引。

46310
领券