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

使用表中的一个字段来存储来自两个不同潜在表的记录的ID引用是不是一种坏做法?

使用表中的一个字段来存储来自两个不同潜在表的记录的ID引用是一种不推荐的做法。

这种做法违反了数据库设计的范式化原则,具体来说是违反了第一范式(1NF)。第一范式要求每个属性都是原子的,即每个属性不能再分解为更小的数据项。将来自两个不同潜在表的记录的ID引用存储在一个字段中,违反了这个原则。

这种做法存在以下问题:

  1. 数据冗余:将同一个ID引用存储在多个记录中,导致数据冗余,增加了数据存储的空间消耗。
  2. 数据不一致性:如果其中一个潜在表的记录被删除或修改了,而另一个潜在表的记录没有相应更新,就会导致数据不一致性。
  3. 数据完整性:没有外键约束来确保引用的完整性,容易出现引用无效的情况。
  4. 查询效率低下:由于需要在一个字段中进行复杂的查询和连接操作,会导致查询效率低下。

相反,应该使用关系型数据库的关联表(或中间表)来解决这个问题。关联表是一个新的表,用于存储两个潜在表之间的关系。它包含两个外键,分别引用两个潜在表的记录。这样可以确保数据的一致性和完整性,并且查询效率也会更高。

对于这种情况,腾讯云提供了云数据库 TencentDB for MySQL 和 TencentDB for PostgreSQL,它们都支持关联表的设计和使用。您可以通过以下链接了解更多关于腾讯云数据库的信息:

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

相关·内容

老程序员常用SQL语句优化技巧总结

①通过变量方式设置参数 好: stringsql = "select * from people p where p.id = ?..."; : stringsql = "select * from people p where p.id = "+id; 数据库SQL文解析和执行计划会保存在缓存,但是SQL文只要有变化,就得重新解析...一般来说,如果使用UNION ALL能满足要求的话,务必使用UNION ALL。还有一种情况,如果业务上能够确保不会出现重复记录。...如果两个一个较小,一个是大,则子查询用exists,子查询用in: 例如:A(小),B(大) 1: select * from A where cc in (select cc...⑩复杂操作可以考虑适当拆成几步 有时候会有通过一个SQL语句实现复杂业务例子出现,为了实现复杂业务,嵌套多级子查询。造成SQL性能问题。

89910

腾讯云TcaplusDB基础能力介绍

在扩容时,将该分为两个分片,其中路由项0-5k放在Shard1 , 路由项5001-10k放在Shard2,2个shard分别存储两个存储节点上。...对比过程因前端读写产品不一致会根据记录修改时间自动判断并重复校验, 以发现系统潜在不一致风险。 通常做法是抽查一些核心部分数据分片进行全量比对,以保障比对效率。...推荐在一个XML文件创建两种不同类型。 元素metalib是xml文件根元素。另外,您可以使用union创建嵌套类型: 属性tagsetversion应该始终为1。...6 generic主键字段 4 7 generic非主键字段 128 8 list组件字段 3 9 list非主键字段 127 10 list记录数 1024 11 索引 8 12 字段长度...(亦称属性长度) 32B 13 主键字段长度 1KB 14 非主键字段长度 256KB 15 单记录大小 1MB 16 单索引关联记录数 无限制 17 单允许分布表格组数 (同一个允许分布在一个表格组也可以分布在多个表格组

2.2K61

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

13.避免频繁创建和删除临时,以减少系统资源消耗。 14.临时并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型或常用某个数据集时。...我主张起单数表名,下面是来自《SQL Server 2000 宝典》一段引用:主张用复数表名阵营认为:是由一组记录构成,所以应当使用复数名词命名它。...此时为了实现上面的关系,就需要一张解析(这张存储学生ID和课程ID,而学生信息和课程信息分别存在各自),这个起名,建议写法是将两个名合并(如果名比较长可做简化),此处如 StudentCourse...外键包含字段命名,外键包含字段和外键是完全不同概念。外键包含字段命名,建议为:外键所在名 + Id。考虑这样一个关系,Hotel,字段Id, Name, CityId。...City,字段Id,Name。因为一个城市可能有好多家酒店,所以是一个一对多关系,City是主表(1方),Hotel是从(多方)。在Hotel,CityId是做为外键使用

1.2K90

JNI开发,你需要知道一些建议

GetFieldId获得字段ID 使用对应方法(例如GetIntField)获取字段下面的值 类似地,要调用一个方法,使用者首先得获得一个类对象引用,然后是方法ID(method ID)。...当一个类被加载时如果你想缓存些ID,而后当这个类被卸载后再次载入时能够自动地更新这些缓存ID,正确做法是在对应添加一段像下面的代码初始化这些ID: /* * 我们在一个类初始化时调用Native...相同对象引用却可能具有不同值。例如,用相同对象连续地调用NewGlobalRef得到返回值可能是不同。为了检查两个引用是否指向是同一个对象,使用者必须使用IsSameObject函数。...绝不要在Native代码中用==符号来比较两个引用。 得出结论就是使用者绝不要在Native代码假定对象引用是常量或者是唯一。代表一个对象32位值从方法一次调用到下一次调用可能有不同值。...在连续调用过程两个不同对象却可能拥有相同32位值。不要使用jobject值作为key. 使用者需要“不过度分配”局部引用

1.3K30

SAP ETL开发规范「建议收藏」

· 特定于环境信息(即命名数据存储DS_EDW_DEV_1)。应该使用数据存储配置配置环境信息,而不是通过为每个数据存储创建不同名称。...3.5 Data Flows 一般而言,数据流应该被设计成将来自一个或多个源信息加载到单个目标一个数据流通常不应该有多个作为目标。例外情况是: 写出审计(即写出行数)。...所有冗余代码(如无用转换或额外字段)应在释放之前删除。 通常,构建数据流最有效方法是使用最少数量变换。 有几种常见做法可能会导致Dataflow设计不稳定性和性能问题。...避免这些问题一些提示如下: 确保Dataflow所有源来自一个数据存储,从而允许将整个SQL命令下推到数据库。...为确保所有SAP Data Services 作业都遵循一致策略存储作业参数,记录作业执行情况(包括消息,统计信息和错误处理),设计了一个框架。

2K10

数据库对象命名参考

我主张起单数表名,下面是来自《SQL Server 2000 宝典》一段引用: 主张用复数表名阵营认为:是由一组记录构成,所以应当使用复数名词命名它。...此时为了实现上面的关系,就需要一张解析(这张存储学生ID和课程ID,而学生信息和课程信息分别存在各自),这个起名,建议写法是将两个名合并(如果名比较长可做简化),此处如 StudentCourse...如果要逐条写数据库操作语句完成一个业务规则,就使用存储过程。...),就会误以为主键是针对字段,即是说一个上有两个主键,其实错了,只有一个主键,但包含了两个字段,这就是常说复合主键。...外键命名 外键命名为 fk_外键所在名_外键引用名。因为外键所在为从,所以上式可以写为 fk_从名_主表名。 外键包含字段命名,外键包含字段和外键是完全不同概念。

91820

腾讯云TcaplusDB基础能力介绍

对比过程因前端读写产品不一致会根据记录修改时间自动判断并重复校验, 以发现系统潜在不一致风险。 通常做法是抽查一些核心部分数据分片进行全量比对,以保障比对效率。...推荐在一个XML文件创建两种不同类型。 元素metalib是xml文件根元素。另外,您可以使用union创建嵌套类型: 属性tagsetversion应该始终为1。...6 generic主键字段 4 7 generic非主键字段 128 8 list组件字段 3 9 list非主键字段 127 10 list记录数 1024 11 索引 8 12 字段长度...(亦称属性长度) 32B 13 主键字段长度 1KB 14 非主键字段长度 256KB 15 单记录大小 1MB 16 单索引关联记录数 无限制 17 单允许分布表格组数 (同一个允许分布在一个表格组也可以分布在多个表格组...API Explorer 支持两种方式API调用:一种是根据输入参数自动生成对应语言调用代码,可以把这些代码放到自己云环境机器调用,方便更灵活使用API; 另一种是根据输入参数自动生成Http调用代码

1.4K70

精选MySQL面试题(附刷题小程序)

枚举类型(ENUM),把不重复数据存储一个预定义集合。 有时可以使用ENUM代替常用字符串类型。 ENUM存储非常紧凑,会把列表值压缩到一个两个字节。...索引是一种特殊文件(InnoDB数据索引是空间一个组成部分),它们包含着对数据表里所有记录引用指针。 索引是一种数据结构。...索引需要空间存储,也需要定期维护, 每当有记录增减或索引列被修改时,索引本身也会被修改。 这意味着每条记录INSERT,DELETE,UPDATE将为此多付出4,5 次磁盘I/O。...行和列数据来自定义视图查询所引用基本,并且在具体引用视图时动态生成。 7.3 为什么要使用视图? 为了提高复杂SQL语句复用性和操作安全性,MySQL数据库管理系统提供了视图特性。...如果给定两个参数,第一个参数指定第一个返回记录偏移量,第二个参数指定返回记录最大数目。

70430

SQL语句大全大全(经典珍藏版)

–0 两个SOUNDEX 函数返回值一个字符不同 –1 两个SOUNDEX 函数返回值一个字符相同 –2 两个SOUNDEX 函数返回值第一二个字符相同 –3 两个SOUNDEX 函数返回值第一二三个字符相同...(*|字段名) 对数据行数统计或对某一栏有值数据行数统计 MAX(字段名) 取得一个表格栏最大值 MIN(字段名) 取得一个表格栏最小值 SUM(字段名) 把数据栏值相加 引用以上函数方法:...这里存储过程也是自动化一个方面,总之就是为了方便管理一种措施。...首先创建一个存储过程(在pubs数据库),我们命名为MyProce示例代码如下(功能为向stores插入stor_id,stor_name两个字段值): create procedure MyProce...下面我们再来看一个创建例子(这个作用是在authors查找一个人名,一个名字分为两字段存储了,如果查到了,打印“查有此人ID:”及其au_id字段值): CREATE procedure

1.2K10

.Net反射(序章) - Part.1

假如我们在建立一个酒店预订系统,那么酒店信息(Hotel)就会引用,用CityId字段引用酒店所在城市。...如同城市(City)一样,在系统其他,比如说酒店订单(HotelOrder),通过字段StatusId引用这个获取酒店预订状态。...我们使用DropDownList等控件获取内容时,需要连接到数据库进行查询,潜在地影响性能。 同时,我们也注意到三点: 此一般会在数据库联合查询中使用到。...在.Net FCL,也经常能看到反射影子,这里就向大家演示一个最常见例子。大家知道,在CLR中一共有两种类型,一种是值类型,一种引用类型。...现在假设我们需要比较两个对象是否相等。当我们比较两个引用类型变量是否相等时,我们比较是这两个变量所指向是不是堆上一个实例(内存地址是否相同)。而当我们比较两个值类型变量是否相等时,怎么做呢?

1.2K40

说烂嘴了Explain执行计划,你不一定讲得清楚

子句或操作顺序 三种情况: id相同: 执行顺序由上至下 id不同:如果是子查询,id序号会递增,id值越大优先级越高,越先被执行 id相同又不同(两种情况同时存在):id如果相同,可以认为是一组...如果将主键置于where列表,mysql就能将该查询转换为一个const eq_ref:唯一性索引扫描,对于每个索引键,只有一条记录与之匹配。常见于主键 或 唯一索引扫描。...本质是也是一种索引访问,它返回所有匹配某个单独值行,然而他可能会找到多个符合条件行,所以它应该属于查找和扫描混合体 range:只检索给定范围行,使用一个索引来选择行。...rows:根据统计信息及索引选用情况,大致估算出找到所需记录所需要读取行数 Extra:不适合在其他字段显示,但是十分重要额外信息 Using filesort :mysql对数据使用一个外部索引排序...4(id = 1)、【select d1.name, … d2 from … d1】:select_type为PRIMARY表示该查询为最外层查询,table列被标记为 “derived3”表示查询结果来自一个衍生

59120

【MySQL】增删查改(进阶)

mysql数据量比较小,所有的数据都在一个mysql服务器上,自增主键是可以很好地工作,如果mysql数据量很大,一台主机放不下就需要进行分库分使用多个主机进行存储。...id为1,被子表引用了,因此被约束,无法删除id为1数据。 id为2,没有被引用,可以删除。 这是为什么呢?每次给子表插入数据,势必要在父查询一下这个id是否存在。...联合查询(多表查询) 实际开发往往数据来自不同,所以需要多表联合查询。多表查询是对多张数据取笛卡尔积: 笛卡尔积是通过排列组合。 笛卡尔积得到一个更大。...但是如果不是一一对应,内连接和外连接就有区别了。 左外连接:会把左结果尽量列出来,哪怕在右没有对应记录,就使用NULL填充。...单行子查询:返回一行记录子查询 任务:查询与“不想毕业”同学同班同学 分析:先去查询不想毕业同学班级id,再按照班级id查询那些同学和他一个班。

3K20

MySQL查询索引分析

场景: 前一段时间修改数据时,给一个添加一个datetime字段,当时遇到了一个问题:我是否需要给该datetime字段上加索引呢?...如果不给该字段加索引,当where语句中使用字段时,会不会扫全呢?如果给其加了索引,那么势必会带来一些开销,假如这个索引用不到的话,给其加了索引岂不是画蛇添足了呢?...不需要再读取完整记录(Mysql一般会先从索引文件读取要找记录,然后根据索引再从数据读取真正记录) 其他 在了解了自己结构以及索引结构之后,通常可以使用explain语句查看Mysql查询执行计划...在执行该条查询语句时,真正选择使用索引 rows字段:显示MySQL认为它执行查询时必须检查行数,不是最后得出结果真实行数 Extra字段:显示Mysql解析查询时详细信息,例如使用了哪一种索引合并优化算法...会先根据索引从数据读取出真实记录,然后根据table filter条件来过滤结果) 那么其实我们再回头来看之前那条SQL语句执行时,已经很清晰知道其进行查询时一个大概过程: 首先从两个索引树找数据

2.2K60

Uber为什么放弃Postgres选择迁移到MySQL?

其他字段... 我们通过一个简单用户解释这个。对于每个用户,我们都有一个自动递增用户 ID 主键、用户名字和姓氏以及用户出生年份。...因此,我们可以这样考虑内部表示形式: 主键索引(将 id 映射到 ctid)定义如下: B 树索引是在 id 字段上定义,并且 B 树每个节点都存有 ctid 值。...请注意,在这种情况下,由于使用了自动递增 ID,B 树字段顺序恰好与顺序相同,但并不是一直都这样。 二级索引看起来差不多,主要区别在于字段存储顺序不同,因为 B 树必须按字典顺序组织。...Postgres 使用一个版本字段确定哪个元组是最新。数据库根据这个字段确定哪个元组对不允许查看新版本数据事务可见。 在 Postgres ,主索引和二级索引都直接指向磁盘上元组偏移量。...MySQL 逻辑复制格式还意味着存储引擎层磁盘变更不会影响复制格式。在进行 MySQL 升级时,典型做法是一次将更新应用于一个副本,在更新完所有副本后,将其中一个提升为新主副本。

2.7K10

五年沉淀,微信全平台终端数据库WCDB迎来重大升级

WCDB_FIELD(Sample::id),它既可以表示 id 这个字段,用来组成各种条件表达式,也可以用来访问Sample实例id这个成员变量,进而可以实现将一个C++对象序列化写到数据库...在磁盘损坏这种低概率发生场景,备份和修复方法还能应对,但是在外部逻辑出现Bug导致大规模写数据库场景,就难以应对了。我们需要一种更主动方法防止数据库被写,防患于未然。...外部逻辑写数据库情况会有两种,一种是误用了数据库路径或者误删了数据库,这个很难出现,要保护也是通过hook系统调用方式做,无法集成在WCDB内部;另一种是误用了数据库文件句柄,这种相对常见,...首先,如果一个字段配置了压缩字段的话,底下就会给这个压缩字段逐个添加一个对应存储压缩状态字段,状态字段存储了是否压缩状态,以及压缩所用算法,然后还要预处理 SQL,把SQL 对压缩字段读写...只需要定义一个解压函数,它接收压缩字段和压缩状态字段做解压,比如下面示例decompress函数,然后再把 SELECT/DELETE 语句中用到压缩字段地方,全部替换成解压函数,这样就能把数据解压之后再使用

51541

五年沉淀,微信全平台终端数据库WCDB迎来重大升级!

WCDB_FIELD(Sample::id),它既可以表示 id 这个字段,用来组成各种条件表达式,也可以用来访问Sample实例id这个成员变量,进而可以实现将一个C++对象序列化写到数据库...在磁盘损坏这种低概率发生场景,备份和修复方法还能应对,但是在外部逻辑出现Bug导致大规模写数据库场景,就难以应对了。我们需要一种更主动方法防止数据库被写,防患于未然。...外部逻辑写数据库情况会有两种,一种是误用了数据库路径或者误删了数据库,这个很难出现,要保护也是通过hook系统调用方式做,无法集成在WCDB内部;另一种是误用了数据库文件句柄,这种相对常见,...首先,如果一个字段配置了压缩字段的话,底下就会给这个压缩字段逐个添加一个对应存储压缩状态字段,状态字段存储了是否压缩状态,以及压缩所用算法,然后还要预处理 SQL,把SQL 对压缩字段读写...只需要定义一个解压函数,它接收压缩字段和压缩状态字段做解压,比如下面示例decompress函数,然后再把 SELECT/DELETE 语句中用到压缩字段地方,全部替换成解压函数,这样就能把数据解压之后再使用

63720

limit offset慢查询背后原因与解法

问题 问题起源于一个涉及到数据遍历脚本。 该脚本会对一个MySQL数据进行有条件遍历。...其实原因也好理解,MySQL数据存储并不是一个数组,可以直接根据下标获取第X位。即使给你搜索字段加了索引,也只是使用字段值去建立一个二叉树(索引二叉树),方便你快速找到数据位置。...是因为查询语句实际是由一个个算子组合起来,比如有选择算子(where条件)、连接算子(join)、投影算则(select字段)、数据源等,不同算子有计算顺序,导致底层算子是不知道上层计算条件。...更多解法 其实可以选择解法还有很多,比如从业务层面限制要访问数据,比如分,比如其他奇诡引用法。...此外,这里介绍解法,也更多地针对MySQL默认使用InnoDB引擎去做优化,在不同数据库存储引擎下,可能会有其他更合适解法。

1.9K30

零售商贩mysql设计:banner管理

当可为NULL 列被索引肘,每个索引记录需要一个额 外字节,在 MyISAM 里甚至还可能导致固定大小 索引 (例如只有一个整数列 索引) 变成可变大小索引。(为null是占用存储空间。...当可为NULL 列被索引肘,每个索引记录需要一个额 外字节,在 MyISAM 里甚至还可能导致固定大小 索引 (例如只有一个整数列 索引) 变成可变大小索引。(为null是占用存储空间。...img_id是关联下面的图片imageid字段. key_word type 是关联起来,代表根据type不同,跳向商品 专题 其他. banner_id关联bannerid,这篇文字第一张啦...img_id关联imageid字段. image数据如下: 图片在image。...Banner位,通常位于界面的顶部,是广告、运营活动、专题、新产品推广等重要信息展示区域,通过运营同学来进行内容信息维护,运用视觉表现手法突出重点信息,引用关注。

77210

数据库工程师常见面试题

维护阶段是对运行数据库进行评价、调整和修改。 问题 4: 插入记录时可以不指定字段名称吗? 答: 不管使用哪种 INSERT 语法,都必须给出 VALUES 正确数目。...Id 有多个记录,把所有这个 id 记录查出来,并显示共有多少条记录数。...但是,视图并不在数据库存储数据值集形式存在。行和列数据来自由定义视图查询所引用, 并且在引用视图时动态生成。对其中所引用基础来说,视图作用类似于筛选。...定义视图筛选可以 来自当前或其它数据库一个或多个,或者其它视图。分布式查询也可用于定义使用多个异类源数据 视图。...如果有几台不同服务器分别存储组织不同地区数据,而您需要将这些服务器上相似结构数 据组合起来,这种方式就很有用。通过视图进行查询没有任何限制,通过它们进行数据修改时限制也很 少。

3K40

面试必备!91 道 MySQL 面试题(含答案)

索引是一种特殊文件(InnoDB数据索引是空间一个组成部分),它们包含着对数据表里所有记录引用指针。 索引是一种数据结构。...),将数据库字段数据转换成定长Hash值,与这条数据行指针一并存入Hash对应位置;如果发生Hash碰撞(两个不同关键字Hash值相同),则在对应Hash键下以链表形式存储。...但是,视图并不在数据库以储存数据值形式存在。行和列数据来自定义视图查询所引用基本,并且在具体引用视图时动态生成。...表示一个查询各个子查询执行顺序; id相同执行顺序由上至下。 id不同id值越大优先级越高,越先被执行。 id为null时表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中。...LIMIT 接受一个两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录偏移量,第二个参数指定返回记录最大数目。

87521

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券