首页
学习
活动
专区
工具
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

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

相关·内容

YashanDB数据完整性

在实际应用中,保证数据的完整性非常重要,通常可以通过在数据库应用程序中执行业务规则或通过数据库触发器触发存储过程等多种方法来保证数据完整性。...唯一约束(Unique key)在相同的列、或多个列的组合中,是否允许不同的行拥有重复的值(允许值为NULL)。主键约束(Primary key)同时满足非空约束和唯一约束。...术语定义外键/复合外键约束定义中包含的列称为外键,一个外键由多个列组成时称为复合外键。外键会引用另一个表的主键或唯一键,复合外键则需引用相同数量和数据类型列的复合主键或复合唯一键。...依赖表又称“子表”,外键约束所在的表。被引用表又称“父表”,被子表的外键引用的表。该表中的被引用值决定了在子表中特定的插入或更新是否可被允许。...允许对同一列同时指定多个检查性约束,但应保证所有检查性约束的合理性,否则可能会导致表不可用。例如:某一列同时被指定“值必须大于5000”和“值必须小于4999”,两个检查性约束互斥,设置不合理。

5900

为什么要用自增主键?

笔者遇到的场景为:维护商业账号的资质相关信息。账号是由全局唯一且自增的分布式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基础之约束

    :可以作用在多个列上,不与列一起,而是单独定义 根据约束起的作用,约束可分为:   1)NOT NULL 非空约束,规定某个字段不能为空   2)UNIQUE 唯一约束,规定某个字段在整个表中是唯一的...关键字:UNIQUE 同一个表可以有多个唯一约束。 唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。 唯一性约束允许多列值为空。...6、外键约束 作用及特点 关键字:FOREIGN KEY 从表的外键列,必须引用/参考主表的主键或唯一约束的列 当创建外键约束时,系统默认会在所在的列上建立对应的普通索引。...但是索引名是外键的约束名。...] FOREIGN KEY(dept_id) REFERENCES dept(dept_id); 删除 #删外键 alter table emp drop foreign key fk_dept_did

    14710

    MySQL【知识改变命运】08

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

    6310

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

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

    2.5K31

    MSSQL之七 数据完整性

    引用完整性,引用完整性保证主键和外键之间的关系总是得到维护。如果被参考表中的一行被一个外键所参考,那么这一行数据便不能直接被删除,用户也不能直接修改主键值。...l CHECK约束不能放在有IDENTITY属性的列上或者数据类型为timestamp的列上。因为这两种列都会自动插入数据。...例如,在students表中,一般将描述学生学号的studentID列作为主键值,因为studentID列中的值是唯一的。主键经常定义在一个列上,但是也可以定义在多个列上。...Ø 外键约束 外键约束强制引用完整性。外键约束定义一个或多个列,这些列可以引用同一个表或另外一个表中的主键约束列或UNIQUE约束列。...2、主键约束被定义在一列上或表中唯一确定行的一系列列的值 3、唯一约束被用于增强非主键列的唯一性 4、外键约束将表中一个或多个列与主键约束被定义的一个同一系列列(另一个表中的主键列)相关联 5、检查约束通过限制列中插入的值增强域完整性

    5900

    公司用的 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、如无特殊需要,所有字段必须有默认值。

    95021

    Mysql数据库对象命名规范

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

    5.9K20

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

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

    1.9K22

    第13章_约束

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

    39330

    MySQL数据库,从入门到精通:第十三篇——MySQL数据表约束详解

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

    24610

    MySQL 约束

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

    23110

    mysql面试题总结

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

    1.2K10

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

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

    46920

    千万级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操作可以更有效的利用索引

    97330

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

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

    76230

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

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

    90130
    领券