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

在同一列上应用多个外键id是否为好做法

在同一列上应用多个外键id是不推荐的做法。下面是完善且全面的答案:

在数据库设计中,外键是用于建立表与表之间关联关系的一种机制。它通过在一张表中引用另一张表的主键,从而实现了表与表之间的数据关联。通常情况下,每个外键都是一个单独的列,它与被引用表的主键对应。

然而,在某些特殊情况下,有人会考虑在同一列上应用多个外键id。这种做法是不推荐的,原因如下:

  1. 数据冗余:将多个外键id放在同一列中,会导致数据冗余。每个外键id都应该有自己的列,以保持数据的一致性和完整性。
  2. 可读性和维护性:多个外键id放在同一列中会使数据的含义变得模糊不清,不易于阅读和维护。每个外键id都应该有具有描述性的列名,以提高代码的可读性和可维护性。
  3. 查询性能:当多个外键id放在同一列中时,需要使用复杂的逻辑来处理这些id的关联关系。这将导致查询性能下降,增加数据库的负载。
  4. 扩展性:将多个外键id放在同一列中,会限制了数据库的扩展性。当需要增加新的外键时,需要修改表结构,可能会影响到已有的数据和业务逻辑。

因此,为了保持数据的一致性、可读性、维护性和查询性能,推荐将每个外键id放在单独的列中。这样可以更好地组织和管理数据,提高数据库的性能和扩展性。

腾讯云相关产品:腾讯云数据库(MySQL、Redis、PostgreSQL等)提供了强大的数据库管理服务,支持外键的定义和使用,以及其他高级功能,如事务处理和数据备份。您可以访问腾讯云数据库产品页面获取更多信息:https://cloud.tencent.com/product/cdb

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

相关·内容

为什么要用自增主键?

笔者遇到的场景:维护商业账号的资质相关信息。账号是由全局唯一且自增的分布式ID生成器生成的,很显然这个时候我们把账号作为主键这就天然合理。...这个时候就accountId就不是一个唯一的了,因为,同一个账号,不同业务线,资质是不一样的。...推荐的做法是,系统设计之初: 设置自增主键; 把当前需要约束的(这里即账号ID)作为唯一约束; 主键: 1.可以定义一列或多列为主键。...不允许空(NULL),主健可作健,唯一索引不可; 2.定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。...唯一: 1.唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段, 指定列上都不允许有相同的值,允许空(NULL) 2.唯一约束可以用于保证基表中增加一条记录时,一个或多个列值是唯一的

4.3K40

【MySQL】04_约束

可以作用在多个列上,不与列一起,而是单独定义 列级约束与表级约束的区别 位置 支持的约束类型 是否可以起约束名 列的后面 语法都支持,但没有效果 不可以 所有列的下面 默认和非空不支持,其他支持 可以...或 alter table 表名称 modify 字段名 数据类型;#去掉not null,相当于修改某个非注解字段,该字段允许空 唯一性约束 特点: 同一个表可以有多个唯一约束。...,然后才可以删除主表的数据 “从表”中指定约束,并且一个表可以建立多个约束 从表的列与主表被参照的列名字可以不相同,但是数据类型必须一样,逻辑意义一致。...当创建约束时,系统默认会在所在的列上建立对应的普通索引。但是索引名是的约束名。...那么建和不建约束不影响查询语句执行 阿里开发规范 【 强制 】不得使用与级联,一切概念必须在应用层解决。

2.4K20
  • 数据仓库中如何使用索引

    维度索引 如果打算在维度表的主键上建立索引,而该是一个代理,不是一个自然或者业务(例如用户名称或者ID)。注意不要在维度表的代理或者变现渐变的列上建立聚集索引。...尽管业务可能不是唯一的,但是对于缓慢渐变的维度表而言,标识列上建立索引是比较好的(如用户ID等),如下图: ?...如果事实表有多个这样的列,那就需要在查询或者构建cube最为频繁的列上建立索引。 如果在date列上分区,可以使用聚集索引列上。...当发现用来创建分区和聚集索引同一列上并且保存分区事实表的文件组上创建了索引,那么SQLServer 将自动用事实表分区来分区索引(例如,索引会有和事实表相同的的分区函数和列)。...下一步,创建非聚集索引每个事实表的上,并且考虑混合和日期,如图1所示可以见建立类似用CustomerKEY + DateKEY 的索引。

    1.8K70

    MySQL【知识改变命运】08

    数据库约束是关系型数据库的一个重要约束 主要保证数据插入的有效性(数据本身是否正确,关联关系是否正确) 人工检查数据工作量太大了,在数据库中定义一些约束,那么数据写入数据库时候,就会帮助我们做一些检查...UNIQUE 唯一约束 指定唯一约束的列,这条列上面不能出现相同的值 FRIMARY KEY 主键约束 NOT NULL和UNIQUE的结合,可以指定一个或者多个列(复合主键),但是只能有一个主键,有助于数据的查询...5:FOREIGN KEY 约束 ⽤于定义主表和从表之间的关系 约束主定义在从表的列上,主表关联的列必须是主键或唯⼀约束 当定义后,要求从表中的列数据必须在主表的主键或唯⼀列存在或为...; 查看表结构,Key列的值MUL表⽰约束的列 正常插⼊数据 插⼊⼀个班级号为100的学⽣,由于主表中没有这个班级,插⼊失败 插⼊班级IdNULL的记录,可以成功,表⽰当前学...8.0.16开始全⾯⽀持CHECK约束,之前的版本会忽略CHECK的定义 但是注意,一般再应用程序级别校验 create table student( id bigint PRIMARY KEY

    6010

    MySQL 开发规范,非常详细,建议收藏!

    4、同一个模块的表尽可能使用相同的前缀,表名称尽可能表达含义。 5、多个单词以下划线 _ 分隔。 6、常规表表名尽量不超过30个字符,temp表和bak表视情况而定,也尽量简短宜,命名应使用小写。...这个也是我们普遍的做法,从程序角度进行完整性控制,但是如果不注意,也会产生脏数据。 5、命名应使用小写。 十一、用户命名规范 1、 生产使用的用户命名格式 code_应用。...,不允许使用对表之间进行关联,确保组件对应的表之间的独立性,系统或表结构的重构提供可能性。...3、禁止使用,可以程序级别来约束完整性 4、Text类型字段如果需要创建索引,必须使用前缀索引 5、单张表的索引数量理论上应控制5个以内。...4、禁止创建约束,约束由程序控制。 5、如无特殊需要,所有字段必须添加非空约束,即not null。 6、如无特殊需要,所有字段必须有默认值。

    2.1K31

    公司用的 MySQL 团队开发规范,太详细了,建议收藏!

    用户命名规范 1、 生产使用的用户命名格式 code_应用 2、 只读用户命名规则为 read_应用 推荐下自己做的 Spring Boot 的实战项目: https://github.com/YunaiV...,不允许使用对表之间进行关联,确保组件对应的表之间的独立性,系统或表结构的重构提供可能性。...0.2,则不建议在此列上创建索引,否则大概率会拖慢SQL执行 2、遵循最左前缀 对于确定需要组成组合索引的多个字段,设计时建议将选择性高的字段靠前放。...3、禁止使用,可以程序级别来约束完整性 4、Text类型字段如果需要创建索引,必须使用前缀索引 5、单张表的索引数量理论上应控制5个以内。...4、禁止创建约束,约束由程序控制。 5、如无特殊需要,所有字段必须添加非空约束,即not null。 6、如无特殊需要,所有字段必须有默认值。

    92821

    Mysql数据库对象命名规范

    DEFAULT NULL, 4、出于性能考虑,如无特殊需要,建议不使用。...,不允许使用对表之间进行关联,确保组件对应的表之间的独立性,系统或表结构的重构提供可能性。...0.2,则不建议在此列上创建索引,否则大概率会拖慢SQL执行 2、遵循最左前缀 对于确定需要组成组合索引的多个字段,设计时建议将选择性高的字段靠前放。...3、禁止使用,可以程序级别来约束完整性 4、Text类型字段如果需要创建索引,必须使用前缀索引 5、单张表的索引数量理论上应控制5个以内。...4、禁止创建约束,约束由程序控制。 5、如无特殊需要,所有字段必须添加非空约束,即not null。 6、如无特殊需要,所有字段必须有默认值。

    5.5K20

    3 万字,关系型数据库性能体系,设计和效率提升

    不要以数据操作不方便理由而不建 是的,加上以后,一些数据操作变得有些麻烦,但是这正是对数据一致性的保护。正是因为这种保护很有效,所以最好不要拒绝它。...以缺省的方式建立 以缺省的方式建立(即用delete restrict方式),以达到保护数据一致性的目的;保护数据一致方面非常有效。如果不建,数据库中容易出现垃圾数据,并且无人知晓。...一般有两种方法: 数据库存储 可以重新建一个表专门存储该大对象字段,该表基本两个字段,一个大对象编号 ID 为主键,一个大对象内容本身,并将该主键原表中作关联,该大对象表存储单独的表空间中...要避免这样问题,可以采取下面的步骤: 唯一性约束的列上创建非唯一性索引(普通索引); 添加唯一性约束; 3.4、列索引的规范 对于关联两个表字段,一般应该分别建立主键、。...实际是否建立,根据对数据完整性的要求决定。 为了提高性能,无论表的大小,都要建立索引,一是为了子父表关联查询的性能考虑,二是为了避免父子表修改而发生死锁。

    1.7K22

    第13章_约束

    ,跟在列的定义后面 表级约束:可以作用在多个列上,不与列一起,而是单独定义 位置 支持的约束类型 是否可以起约束名 列级约束: 列的后面 语法都支持,但没有效果 不可以 表级约束...# 3.2 关键字 UNIQUE # 3.3 特点 同一个表可以有多个唯一约束。 唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。 唯一性约束允许列值空。...,需要先删除从表中依赖该记录的数据,然后才可以删除主表的数据 (6) “从表” 中指定约束,并且一个表可以建立多个约束 (7)从表的列与主表被参照的列名字可以不相同,但是数据类型必须一样,...比如大型网站的中央数据库,可能会 因为约束的系统开销而变得非常慢 。所以, MySQL 允许你不使用系统自带的约束, 应用层面 完成检查数据一致性的逻辑。...# 6.10 阿里开发规范 【 强制 】不得使用与级联,一切概念必须在应用层解决。 说明:(概念解释)学生表中的 student_id 是主键,那么成绩表中的 student_id 则为

    37930

    MySQL 约束

    表级约束:可以作用在多个列上,不与列一起,而是单独定义 根据约束所起的作用,约束可分为: 主键约束 主键约束确保表中的每一行都具有唯一标识符,能够唯一标识该表中的每条记录。...例如,在用户信息表中,要避免表中的用户名重名,就可以把用户名列设置唯一约束。 约束 约束用于建立表与表之间的关系,确保引用另一个表中的值时的完整性。...例如,员工信息表中,员工所属部门是一个,因为该字段是部门表的主键。 检查约束 检查约束允许你定义满足特定条件值的范围或规则,用于检查字段值是否有效。...例如,员工信息表中,员工所属部门是一个,因为该字段是部门表的主键。...(id) -- 在从表中指定约束 ); 创建检查约束 MySQL 8.0.16 之前,CREATE TABLE 仅允许以下有限版本的表 CHECK 约束语法,该语法将被解析并忽略: CHECK

    21510

    mysql面试题总结

    主键 超 候选 1)超(super key) :关系中能唯一标识元组的属性集称为关系模式的超 2)候选(candidate key):不含有多余属性的超称为候选 3)主键(primary...主键:主键就是候选里面的一个,是人为规定的,例如学生表中,我们通常会让“学号”做主键,教师表中让“教师编号”做主键。 比较简单,学生表中的就是“教师编号”。...,这些列主要是一些,可以加快连接的速度; 4)经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序...所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。...,alter表等操作,ROW格式会产生大量日志,因此考虑是否使 用ROW格式日志时应该跟据应用的实际情况,其所产生的日志量会增加多少,以及带来的IO性能问题。)

    1.1K10

    【值得收藏】一份非常完整的Mysql规范

    4、尽量控制单表数据量的大小,建议控制500万以内 500万并不是MySQL数据库的限制,过大会造成修改表结构,备份,恢复都会有很大的问题, 可以用历史数据归档(应用于日志数据),分库分表(应用于业务数据...5、谨慎使用MySQL分区表 分区表物理上表现为多个文件,逻辑上表现为一个表 谨慎选择分区,跨分区查询效率可能更低 建议采用物理分表的方式管理大数据!...若太多则应考虑一些不常使用到的列上建的索引是否有必要。...九、索引设置规范 尽量避免使用约束 不建议使用约束(foreign key),但一定要在表与表之间的关联上建立索引; 可用于保证数据的参照完整性,但建议在业务端实现; 会影响父表和子表的写操作从而降低性能...10、减少同数据库的交互次数 数据库更适合处理批量操作 合并多个相同的操作到一起,可以提高处理效率 11、对应同一列进行or判断时,使用in代替or in的值不要超过500个in操作可以更有效的利用索引

    44420

    千万级MySQL数据库建立索引,提高性能的秘诀

    InnoDB所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般2GB。...:MyISAM不支持,而InnoDB支持。...如果是不复杂的、非关键的Web应用,还是可以继续考虑MyISAM的,这个具体情况具体考虑。 MyISAM:不支持事务,不支持,表锁;插入数据时锁定整个表,查行数时无需整表扫描。...一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有 必要。...若应用系统需要频繁更新 clustered 索引数据列,那么需要考虑是否应将该索引建 clustered 索引。

    3.8K10

    值得收藏:一份非常完整的 MySQL 规范

    ,备份表必须以bak_前缀并以日期(时间戳)后缀 · 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索 引失效,导致查询效率降低...分区表 分区表物理上表现为多个文件,逻辑上表现为一个表 谨慎选择分区,跨分区查询效率可能更低 建议采用物理分表的方式管理大数据 6、尽量做到冷热数据分离,减小表的宽度 MySQL限制每个表最多存储...九、索引SET规范 尽量避免使用约束 · 不建议使用约束(foreign key),但一定要在表与表之间的关联上建立索引; · 可用于保证数据的参照完整性,但建议在业务端实现; · 会影响父表和子表的写操作从而降低性能...Mysql中,对于同一个SQL多关联(join)一个表,就会多分配一个关联缓存,如果在一个SQL中关联的表越多,所占用的内存也就越大。...10、减少同数据库的交互次数 数据库更适合处理批量操作 合并多个相同的操作到一起,可以提高处理效率 11、对应同一列进行or判断时,使用in代替or in的值不要超过500个in操作可以更有效的利用索引

    97130

    值得收藏:一份非常完整的 MySQL 规范

    ,备份表必须以bak_前缀并以日期(时间戳)后缀 · 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索 引失效,导致查询效率降低...分区表 分区表物理上表现为多个文件,逻辑上表现为一个表 谨慎选择分区,跨分区查询效率可能更低 建议采用物理分表的方式管理大数据 6、尽量做到冷热数据分离,减小表的宽度 MySQL限制每个表最多存储...九、索引SET规范 尽量避免使用约束 · 不建议使用约束(foreign key),但一定要在表与表之间的关联上建立索引; · 可用于保证数据的参照完整性,但建议在业务端实现; · 会影响父表和子表的写操作从而降低性能...Mysql中,对于同一个SQL多关联(join)一个表,就会多分配一个关联缓存,如果在一个SQL中关联的表越多,所占用的内存也就越大。...10、减少同数据库的交互次数 数据库更适合处理批量操作 合并多个相同的操作到一起,可以提高处理效率 11、对应同一列进行or判断时,使用in代替or in的值不要超过500个in操作可以更有效的利用索引

    75830

    值得收藏:一份非常完整的 MySQL 规范

    ,备份表必须以bak_前缀并以日期(时间戳)后缀 · 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索 引失效,导致查询效率降低...分区表 分区表物理上表现为多个文件,逻辑上表现为一个表 谨慎选择分区,跨分区查询效率可能更低 建议采用物理分表的方式管理大数据 6、尽量做到冷热数据分离,减小表的宽度 MySQL限制每个表最多存储...九、索引SET规范 尽量避免使用约束 · 不建议使用约束(foreign key),但一定要在表与表之间的关联上建立索引; · 可用于保证数据的参照完整性,但建议在业务端实现; · 会影响父表和子表的写操作从而降低性能...Mysql中,对于同一个SQL多关联(join)一个表,就会多分配一个关联缓存,如果在一个SQL中关联的表越多,所占用的内存也就越大。...10、减少同数据库的交互次数 数据库更适合处理批量操作 合并多个相同的操作到一起,可以提高处理效率 11、对应同一列进行or判断时,使用in代替or in的值不要超过500个in操作可以更有效的利用索引

    90030

    mysql数据库面试题目及答案_java面试数据库常见问题

    隔离性(Isolation) * 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。...比如在设计一个订单数据表的时候,可以将客户编号作为一个和订单表建立相应的关系。而不可以订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。...select * from news where id = 1 or id = 2 3)多个单列索引并不是最佳选择 MySQL 只能使用一个索引,会从多个索引中选择一个限制最为严格的索引,因此,多个列创建单列索引...:表的是另一表的主键, 组合索引:索引可以覆盖多个数据列,如像INDEX(columnA, columnB)索引。...连接: 左连接: 左边驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。 右连接:右边驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。

    91530

    MySQL使用规范手册,程序员必知必会

    ,其支持事务处理、支持、支持崩溃修复能力和并发控制是我们建表时首选的存储引擎。...5、使用MySQL分区表需谨慎 分区是将一个表的数据按照某种方式,比如按照时间上的月份,分成多个较小的,更容易管理的部分,但是逻辑上仍是一个表;分区表物理上表现为多个文件,逻辑上仍表现为同一个表,需要谨慎选择分区...3、尽量避免使用约束 不建议使用约束(foreign key),但一定要在表与表之间的关联上建立索引; 虽然可以保证数据的参照完整性,但也会影响父表和子表的写操作从而降低性能,还会使得表更耦合...2)一条SQL语句只能使用复合索引中的一列进行范围查询 例如有weight、age、sex三列的联合索引,查询条件中有weight列的范围查询,则在age和sex列上的索引将不会被使用;因此,定义联合索引时...7、避免使用JOIN 关联太多表 1)Mysql中,对于同一个SQL关联(join)多个表,每个join 就会多分配一个关联缓存,如果在一个SQL中关联的表越多,所占用的内存也就越大; 2)如果程序中大量的使用了多表关联的操作

    97020

    如何更规范化使用MySQL

    ,而InnoDB类型支持;MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部等高级数据库功能;因此,其支持事务处理、支持、支持崩溃修复能力和并发控制是我们建表时首选的存储引擎...5、使用MySQL分区表需谨慎       分区是将一个表的数据按照某种方式,比如按照时间上的月份,分成多个较小的,更容易管理的部分,但是逻辑上仍是一个表;分区表物理上表现为多个文件,逻辑上仍表现为同一个表...3、尽量避免使用约束 不建议使用约束(foreign key),但一定要在表与表之间的关联上建立索引; 虽然可以保证数据的参照完整性,但也会影响父表和子表的写操作从而降低性能,还会使得表更耦合...号则不会使用列上的索引。...7、避免使用JOIN 关联太多表 1)Mysql中,对于同一个SQL关联(join)多个表,每个join 就会多分配一个关联缓存,如果在一个SQL中关联的表越多,所占用的内存也就越大; 2)如果程序中大量的使用了多表关联的操作

    1K10

    MySQL使用规范手册,程序员必知必会

    ,其支持事务处理、支持、支持崩溃修复能力和并发控制是我们建表时首选的存储引擎。...5、使用MySQL分区表需谨慎 分区是将一个表的数据按照某种方式,比如按照时间上的月份,分成多个较小的,更容易管理的部分,但是逻辑上仍是一个表;分区表物理上表现为多个文件,逻辑上仍表现为同一个表,需要谨慎选择分区...3、尽量避免使用约束 不建议使用约束(foreign key),但一定要在表与表之间的关联上建立索引; 虽然可以保证数据的参照完整性,但也会影响父表和子表的写操作从而降低性能,还会使得表更耦合...2)一条SQL语句只能使用复合索引中的一列进行范围查询 例如有weight、age、sex三列的联合索引,查询条件中有weight列的范围查询,则在age和sex列上的索引将不会被使用;因此,定义联合索引时...7、避免使用JOIN 关联太多表 1)Mysql中,对于同一个SQL关联(join)多个表,每个join 就会多分配一个关联缓存,如果在一个SQL中关联的表越多,所占用的内存也就越大; 2)如果程序中大量的使用了多表关联的操作

    79220
    领券