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

在数据库中使用"外键冗余"是不是很糟糕?

在数据库中使用"外键冗余"是不是很糟糕,这个问题涉及到数据库设计和性能优化方面的知识。

外键冗余是指在数据库中,在多个表中存储相同的数据,以提高查询性能。这种方法可以减少表之间的关联查询,从而提高查询速度。但是,外键冗余也会带来一些问题,比如数据一致性、数据维护和数据同步等方面的问题。

因此,是否使用外键冗余,需要根据具体的业务需求和数据库设计来决定。如果经常需要进行复杂的关联查询,而且对查询性能有较高要求,可以考虑使用外键冗余。但是,如果数据库经常需要进行数据维护和更新,那么使用外键冗余可能会带来更多的问题。

推荐的腾讯云相关产品:腾讯云数据库 MySQL、腾讯云数据库 Redis、腾讯云数据库 MongoDB、腾讯云数据库 Cassandra、腾讯云数据库 CynosDB 等。

产品介绍链接地址:https://cloud.tencent.com/product/cdb

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

相关·内容

软件方法(下)第8章分析之分析类图—知识篇Part09-审查类和属性1

要特别说明的是,习惯于关系数据库建模的建模人员有时会犯这样的错误,一个类里放上另外一个类的属性作为“”。...图8-74 不需要“编码”作为“” “人员”里放“组织编码”不合适,放一个无意义的标识“组织ID”呢?同样也不可以。...因为这个“组织ID”是“组织”的标识,前文已经说了,标识属性此时不需要存在,所以“组织ID”“组织”里不存在,更不要说放到其他类作为“”了。...图8-75 不需要“ID”作为“设计工作流,需要把类图映射到关系数据库时,确实需要把"组织"表的主键(可能是"编码"也可能是生成的代理主键)放在"人员"表作为,但正如上文所说,这同样是另一个领域的知识...分析工作流不断提出性能问题的人,您可以尝试让他整理一下核心域逻辑,也可以去看看他之前写的代码,大概率会发现其中逻辑的组织是很糟糕的。

35620

数据库设计

项目二:数据库设计 一,为什么需要设计数据库 良好的数据库设计 1.节省数据的存储空间 2.能够保证数据的完整性 3.方便进行数据库应用系统的开发 糟糕数据库设计 1.数据冗余、存储空间浪费 2.内存空间浪费...四,数据库的设计步骤 概念模型:把现实世界转换为信息世界的模型,E-R模型 实施模型:把信息世界转化为数据世界使用的模型,关系模型 五,模型 层次模型 网状模型 关系模型 此为二维表格 关系模型的特点...,代表存储对象的共有的属性 (4)数据表之间的关联通过“”来实现的,分为主键和两种。...信息原则:每个单元只能存贮一条数据; ②列有唯一性的名称,贮存在列下的数据必须具有相同数据类型;列没有顺序;; ③每行数据是唯一的;行没有顺序; ④实体完整性原则,即主键不能为空; ⑤引用完整性原则,即不能为空...综合过程,同名实体只能出现一次,还要去掉不必要的联系,以便消除冗余。一般来说,从总体E—R图必须能导出原来的所有局部视图,包括实体、属性和联系。

22120
  • 数据库表结构设计原则有哪些_数据库表的设计方法

    基本上设计数据库表的时候,首先考虑设计要满足功能需求,这是最根本的,其次是满足性能需求,再次则是满足扩展性需求,这一点大规模系统是必须要考虑的。...例如,customer表里面company_name,company_phone等字段可以合并为company字段,当然这样做的前提是company_name字段不需要单独作为查询条件(如果使用数据库的...冗余字段主要是为了避免多次关联的查询,但是如果关联数据容易被缓存,那么查询出主要数据后,关联数据直接从缓存读取,这样冗余字段方案就可以被替代了。...复杂的大表里,首先确定核心的业务实体字段、和索引,而其他的字段则根据情况包合并到一个extra(xml或者字符串类型)的字段里,这样也就可以满足了以后的扩展需求,因为字符串或者xml结构里增加数据字段是容易的事情...划分法是根据键值对表进行划分,基本的方法也就是固定法和动态增长法。

    71020

    数据库设计三大范式趣解—数据库理论

    (super key):关系能唯一标识元组的属性集称为关系模式的超候选(candidate key):不含有多余属性的超称为候选主键(primary key):用户选作元组标识的一个候选程序主键全码...第二范式(2NF):符合1NF,并且,非主属性完全依赖于码——属性完全依赖于主键听起来好像神秘,其实真的没什么。一个候选码的主属性也可能是好几个。...主键与 一般而言,一个实体不能既无主键又无E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有(因为它有父亲)。  ...主键与的设计,全局数据库的设计,占有重要地位。...正确认识数据冗余  主键与多表的重复出现, 不属于数据冗余,这个概念必须清楚,事实上有许多人还不清楚。非字段的重复出现, 才是数据冗余!而且是一种低级冗余,即重复性的冗余

    73910

    可能被你误解的 DRY 原则

    实际上,DRY 原则对工作、生活的问题也有着指导作用,比如我写本文由于要作用于博客、ppt 等场景,创建了多个副本,设想一下,如果我要修改某个章节,是不是每处都要改?到时候我或许会抓狂。...但是,注释掩盖不了糟糕的代码。 如果是为了掩饰方法糟糕或者晦涩难懂的代码,这时候应该重构代码。 推荐: 方法名准确的描述方法要做什么,方法内每行代码都写的像注释一样清晰易懂,注释则可以移除。...不得不冗余的地方,将相关的逻辑尽可能控制局部,来减少重复带来的风险。 2.4 表征重复 主要描述的和外部打交道的时候,不可避免的重复。代码必须持有外部系统已经蕴含的知识(表征)。...同语言的服务,项目构建工具的帮助下,同一个仓库组织起来,依赖公共组件服务。 但是,无法破除跨语言的壁垒。 3 总结 DRY 原则描述的重复是 知识和意图 的重复。...不要过度追求 DRY,破坏了内聚性,这两者很难两头都握住,遗憾的告诉你,没有规则可言,多向经验丰富的程序员讨教。

    1.2K20

    21个MySQL表设计的经验准则

    有些业务上的字段,比如身份证,虽然是唯一的,一些开发者喜欢用它来做主键,但是不是建议哈。...因此,我们一般避免使用MySQL保留字,如select、interval、desc等等 12. 不搞关联,一般都在代码维护 什么是呢?...,也叫FOREIGN KEY,它是用于将两个表连接在一起的。FOREIGN KEY是一个表的一个字段(或字段集合),它引用另一个表的PRIMARY KEY。...阿里的Java规范也有这么一条: 【强制】不得使用与级联,一切概念必须在应用层解决。 我们为什么不推荐使用呢? 使用存在性能问题、并发死锁问题、使用起来不方便等等。...每次做DELETE或者UPDATE都必须考虑约束,会导致开发的时候很难受,测试数据造数据也不方便。 还有一个场景不能使用,就是分库分表。 13.

    1.7K21

    宽表的缺点

    现代BI通常使用关系数据库作为后台,而SQL通常使用的HASH JOIN算法,关联表数量和关联层级变多的时候,计算性能会急剧下降,有七八个表三四层级关联时就能观察到这个现象,而BI业务的关联复杂度远远超过这个规模...BI业务绝大部分的JOIN都是等值JOIN,也就是关联条件为等式的 JOIN。SPL把等值关联分为关联和主键关联。...关联 和SQL不同,SPL明确地区分了维表和事实表。BI系统的维表都通常不大,可以事先读入内存建立索引,这样关联时可以少计算一半的HASH值。...预关联可以系统启动时一次性读入并做好,以后直接使用即可。 当事实表较大无法全内存时,SPL 提供了序号化方法:将事实表字段值转换为维表对应记录的序号。...有了这些高效机制以后,我们就可以BI分析不再使用宽表,转而基于SPL存储和算法做实时关联,性能比宽表还更高(没有冗余数据读取量更小,更快)。

    2.2K21

    数据库知识学习,数据库设计优化攻略(一)

    1.3.3 主键的设计 ➢ 主键是必要的,SQL SERVER 的主键同时是一个唯一索引,而且实际应用,我们往往选择最小的组合作为主键, 所以主键往往适合作为表的聚集索引。...1.3.4 的设计 ➢ 作为数据库对象,很多人认为麻烦而不用,实际上,大部分情况下是很有用的,理由是: ➢ 是最高效的一致性维护方法,数据库的一致性要求,依次可以用、CHECK...➢ 谨慎使用级联删除和级联更新,级联删除和级联更新作为 SQL SERVER 2000 当年的新功能, 2005 作 了保留, 应该有其可用之处。...我这里说的谨慎,是因为级联删除和级联更新有些突破了传统的关于的定义,功能有点 太过强大,使用前必须确定自己已经把握好 其功能范围,否则,级联删除和级联更新可能让你的数据莫名其妙 的被修改或者丢失。...1.3.6 数据库物理存储和环境的设计 ➢ 设计阶段,可以对数据库的物理存储、操作系统环境、网络环境进行必要的设计,使得我们的系统将来能适应比 较多的用户并发和比较大的数据量。

    46130

    DBA | 炼气期,关系数据库及六大范式(NF)理论概述!

    4.主键:主键是关系唯一标识每个元组的属性或属性组合,确保每条记录的唯一性。 5.是一个关系引用另一个关系的主键的属性,用于建立表之间的关系。...主键(primary key):⽤户选作元组标识的⼀个候选称为主键 (foreign key):一个表存在的另一个表的主键称为此表的。 主属性:候选的属性称为主属性。...:公司里某个人(或某几个人的组合)是另一个公司的老板,那他或他们就是“”(一个表存在的另一个表的主键称为此表的)。...反范式化 定义:是一种对范式化设计的数据库的性能优化策略,通过增加冗余或重复的数据来提供数据库的读取性能 白话:尽信书不如无书:有时候,一味地追求符合范式,可能会导致数据库查询时的时间开销很大、...因此,可以员工表增加一个冗余的字段 部门名称 ,这样每次的查询就可以直接获取所需信息,而不用进行连接操作了。

    13410

    PHP没你想的那么差

    本文试着回答一些常见的关于 PHP 的断言,目的是向非技术人员解释,PHP 并不像许多人所说的那么糟糕。 1它是不是鼓励糟糕的实践? 不再是了。...通过使用框架避免了糟糕实践。 语言特性现在有很多讨论。糟糕的特性不再受到支持。 PHP 添加了其他语言中存在的大部分(即使不是全部)的特性。 2它的安全性是不是很差?...通过 SQL 中使用 prepared 语句,避免了 SQL 注入攻击(这是由于需要构建 SQL 查询并将查询和数据一起发送导致的,其中用户可以向查询增加额外的 SQL 命令)。...网站慢通常不是由于使用的语言不够快,而是因为服务器或数据库导致的性能问题。 4它的伸缩性是不是真的很差? 实际上,任何语言都可以伸缩。...如果你能够扩展你的数据库,你就可以扩展你的应用程序。数据库比应用服务器更难扩展。增加另一个读取数据库的客户端容易;但是,让数据库快速运行要难得多。

    43040

    数据库(表结构)设计技巧及注意事项

    2、一个企业,如果依赖很多产品,但是每个产品都使用同一套用户,那么应该将用户单独构建一个库,叫做企业用户中心。 3、不同类型的数据应该分开管理,例如,财务数据库,业务数据库等。...4、由于存储过程不同的数据库,支持方式不一样,因此不建议过多使用使用复杂的存储过程。为数据库服务器降低压力,不要让数据库处理过多的业务逻辑,将业务逻辑处理放到应用程序。...19、主键与多表的重复出现, 不属于数据冗余,这个概念必须清楚,事实上有许多人还不清楚 。非字段的重复出现, 才是数据冗余!而且是一种低级冗余,即重复性的冗余。...3、一般而言,一个实体不能既无主键又无E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有(因为它有父亲)。...主键与的设计,全局数据库的设计,占有重要地位。

    7.1K43

    服务器 数据库设计技巧--1

    主键与 一般而言,一个实体不能既无主键又无E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有(因为它有父亲)。...主键与的设计,全局数据库的设计,占有重要地位。...正确认识数据冗余 主键与多表的重复出现,不属于数据冗余,这个概念必须清楚,事实上有许多人还不清楚。非字段的重复出现, 才是数据冗余!而且是一种低级冗余,即重复性的冗余。...只有字段的个数少了,才能说明系统不存在数据重复,且很少有数据冗余,更重要的是督促读者学会“列变行”,这样就防止了将子表的字段拉入到主表中去,主表留下许多空余的字段。...4、的设计 作为数据库对象,很多人认为麻烦而不用,实际上,大部分情况下是很有用的,理由是:   是最高效的一致性维护方法,数据库的一致性要求,依次可以用、CHECK约束、规则约束、

    1.9K40

    数据库设计的14个技巧

    主键与   一般而言,一个实体不能既无主键又无E—R 图中, 处于叶子部位的实体, 能够定义主键, 也能够不定义主键(由于它无子孙), 但必需要有(由于它有父亲)。   ...主键与的设计,全局数据库的设计,占有重要地位。...正确认识数据冗余   主键与多表的反复出现, 不属于数据冗余,这个概念必须清楚,其实有很多人还不清楚 。非字段的反复出现, 才是数据冗余!并且是一种低级冗余,即反复性的冗余。...由于主键的作用,一是建主键索引,二是做为子表的 ,所以组合主键的字段个数少了,不仅节省了执行时间,并且节省了索引存储空间;    (3) 一个表的字段个数越少越好。...(4) 对数据库管理系统DBMS进行系统优化,即优化各种系统參数,如缓冲区个数。    (5) 使用面向数据的SQL语言进行程序设计时,尽量採取优化算法。

    42010

    14个实用的数据库设计技巧

    主键与 一般而言,一个实体不能既无主键又无E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有(因为它有父亲)。...主键与的设计,全局数据库的设计,占有重要地位。...正确认识数据冗余 主键与多表的重复出现, 不属于数据冗余,这个概念必须清楚,事实上有许多人还不清楚。非字段的重复出现, 才是数据冗余!而且是一种低级冗余,即重复性的冗余。...因为主键的作用,一是建主键索引,二是做为子表的,所以组合主键的字段个数少了,不仅节省了运行时间,而且节省了索引存储空间; 3、一个表的字段个数越少越好。...对数据库管理系统DBMS进行系统优化,即优化各种系统参数,如缓冲区个数。 使用面向数据的SQL语言进行程序设计时,尽量采取优化算法。

    48330

    MySQL-性能优化-优化设计和设计原则

    优化设计第三步 数据库优化策略 1、选择小的数据类型 2、单独设计主键,并考虑分布式扩展 3、设计 (重要,我们之前开发都是直接使用的弱来设置主外关系,而实际项目中,如果要是删除了主键对应的记录后...,的记录是没有删除的,这样对于数据库的数据是容易混乱的,不便于维护,那我要是使用的是强的方式,这样直接删除主键记录,没有删除外的记录,这样是要报错的,这样容易找到代码上的问题,的设计能对于数据完整性有一个好的约束...,当你开发的系统已经完全不会出现数据不完整的问题的时候,你可以考虑使用来关联表操作,也同时会省去消耗,具体的设置方法查考博客:及其约束理解) 4、索引设计 (对于业务上的字段,那些需要字段需要建立索引...(三)列意味着唯一的值 如果表示坐标(0,0),应该使用两列表示,而不是将“0,0”放在1个列。 (四)列的顺序,可读性问题 (五)定义主键和 数据表必须定义主键和(如果有)。...没有定义定义不好的表。 2NF 多个属性有同样的前缀。 重复的数据组。 汇总的数据,所引用的数据一个完全不同的实体。 BCNF- “每个必须唯一标识实体,每个非熟悉必须描述实体。”

    73720

    初学后端,如何做好表结构设计?

    比如我的例子,如果不需要灵活设置,完全可以写到配置文件,并不需要单独设计。...讨论我的方案也我的技术交流群里引起了大家的讨论,也和大家分享一下:Q1 冗余设计和一致性问题 提问: 一个表里做了这么多,如果我要查各自的名称,势必要关联4张表,对于这种存在多关联的这种表,要不要做冗余呢...你提到的这个场景是视频详情信息,如果要展示这些的名称怎么设计更好。我的建议是这样的:根据需求可以做适当冗余,比如你的主表信息量不大,配置信息修改后同步修改冗余字段的成本并不高。...或者像我文章写的不做冗余设计,但是会把信息缓存,业务查询从缓存取值。...提问:为什么要设计关联?直接写到视频表不就行了?这么设计的意义在哪里? 回答:关键问题是想解决管理后台灵活配置如果没有这个需求,我们可以直接把筛选条件以配置文件的方式写死程序,降低复杂度。

    36130

    14个实用的数据库设计技巧

    主键与 一般而言,一个实体不能既无主键又无E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有(因为它有父亲)。...主键与的设计,全局数据库的设计,占有重要地位。...正确认识数据冗余 主键与多表的重复出现, 不属于数据冗余,这个概念必须清楚,事实上有许多人还不清楚。非字段的重复出现, 才是数据冗余!而且是一种低级冗余,即重复性的冗余。...因为主键的作用,一是建主键索引,二是做为子表的,所以组合主键的字段个数少了,不仅节省了运行时间,而且节省了索引存储空间; 3、一个表的字段个数越少越好。...对数据库管理系统DBMS进行系统优化,即优化各种系统参数,如缓冲区个数。 使用面向数据的SQL语言进行程序设计时,尽量采取优化算法。

    1.1K20

    Java开发数据库设计的14个技巧,你知道几个?

    主键与 一般而言,一个实体不能既无主键又无E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有(因为它有父亲)。...主键与的设计,全局数据库的设计,占有重要地位。...正确认识数据冗余 主键与多表的重复出现, 不属于数据冗余,这个概念必须清楚,事实上有许多人还不清楚。非字段的重复出现, 才是数据冗余!而且是一种低级冗余,即重复性的冗余。...因为主键的作用,一是建主键索引,二是做为子表的,所以组合主键的字段个数少了,不仅节省了运行时间,而且节省了索引存储空间; 3、一个表的字段个数越少越好。...对数据库管理系统DBMS进行系统优化,即优化各种系统参数,如缓冲区个数。 使用面向数据的SQL语言进行程序设计时,尽量采取优化算法。

    68800

    设计数据库:7件你不想做的事情

    你的数据库设计很糟糕。 没有人告诉你这个的原因有两个:无知或冷漠。他们要么不知道这不好,要么不在乎。 嗯,我关心糟糕的设计,因为我通常承担着让查询运行得很快并克服糟糕设计的限制的重担。...如果您知道某一列的唯一可能值0到100,000之间,那么当INT可以很好地处理该列时,就不需要对该列使用BIGINT数据类型。为什么这很重要?...花点时间,努力一开始就把它做好。 4. 不检查作为索引策略的一部分 当然,我假设你已经定义了。我见过许多数据库几乎没有主键、,甚至没有定义任何索引。不,我也不知道谁会做这样的事。...这通常是由于有人使用优化索引advisor工具但它通常可以的情况是由于有人阅读一篇博客文章说,“索引是你需要什么”,他们着手创建一打索引以获得一个查询运行得更快。...如果您发现自己在做这7件事情的任何一件,那么随着时间的推移,您的数据库设计将越来越偏离理想。简单地避免这七件事将使您的数据库一段时间内不会出现性能下降。

    62560

    初识Hibernate之关联映射(二)

    本篇接着介绍有关关联映射的其他几种映射方式,主要有以下几种: 基于的单向一对一关联映射 基于主键的单向一对一关联映射 单向多对多关联映射 一、基于的单向一对一关联映射      具有一对一关联的表结构也是常见的...于是我们的person表会有一个关联到 idcard表的主键,只要这个列唯一即可保证person到idcard表的关系由多对一变为一对一,也就是说单向的一对一关联映射其实上也就是列唯一的多对一的关联映射...one-to-one标签则配置了person类的IdCard属性,便于我们取数据的时候Hibernate填充数据到该属性。...下面我们添加数据到数据库,通过查看输出的Sql语句了解Hibernate是如何为我们创建关联的。...常见的一个例子,一个学生可以有多个老师,同时一个老师也可以有多个学生,那么这就是很明显的多对多的关联映射。针对这种情况,一般来说数据库的表可以设计如下: ?

    96950
    领券