数据库表主键类型设计踩坑记录

简介: 数据库表主键类型设计踩坑记录

背景

第一版设计的时候主键全部设计成了int类型,且自增。我们使用的是mysql数据库,考虑到这样生成主键索引的效率更高,即更容易维护一个二叉树。持久层框架使用的mybatis,直接使用IdType.AUTO来标记主键字段。

问题:

我们设计了一个附件表,里面有一个sub_id来关联其他业务环节的主键,以此来标识此附件为哪一个业务的附件。但此时就出现了问题,因为所有的主键都是从1开始自增,附件表里的sub_id就可能出现重复,而无法区分是哪个业务环节的附件。

解决方案:

1、我们有考虑附件表里面添加了一个sub_type字段,对每个环节进行编码从而来区分。

2、更换主键为字符串类型,后台采用全局唯一的生成规则来生成主键,例如:IdType.ID_WORKER_STR。

后来选择了第二种方式。考虑第一种可能后续改造有点儿硬编码,需要在sql语句中写死哪个环节,不太好。

思考:

之前看很多系统的数据库主键可能都不是设计成int,然后自增,当时还在想为什么。现在有点儿理解了,有时候主键在全局是唯一值,在做业务关联时可能更好区分与设计。

目录
相关文章
|
4月前
|
存储 安全 数据库
数据库的索引都有哪些类型?如何选择?
【8月更文挑战第17天】数据库的索引都有哪些类型?如何选择?
196 0
|
2月前
|
存储 移动开发 数据库
HTML5 Web IndexedDB 数据库常用数据存储类型
IndexedDB 支持多种数据存储类型,满足复杂数据结构的存储需求。它包括基本数据类型(如 Number、String、Boolean、Date)、对象(简单和嵌套对象)、数组、Blob(用于二进制数据如图像和视频)、ArrayBuffer 和 Typed Arrays(处理二进制数据)、结构化克隆(支持 Map 和 Set 等复杂对象),以及 JSON 数据。尽管不直接支持非序列化数据(如函数和 DOM 节点),但可以通过转换实现存储。开发者应根据具体需求选择合适的数据类型,以优化性能和使用体验。
|
4月前
|
SQL 数据挖掘 数据库
数据库join类型有哪些?
【8月更文挑战第2天】
170 17
数据库join类型有哪些?
|
4月前
|
数据采集 DataWorks 安全
DataWorks产品使用合集之如何判断数据库类型是否支持整库
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
4月前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。
|
4月前
|
数据采集 前端开发 算法
基于朴素贝叶斯算法的新闻类型预测,django框架开发,前端bootstrap,有爬虫有数据库
本文介绍了一个基于Django框架和朴素贝叶斯算法开发的新闻类型预测系统,该系统具备用户登录注册、后台管理、数据展示、新闻分类分布分析、新闻数量排名和新闻标题预测等功能,旨在提高新闻处理效率和个性化推荐服务。
|
4月前
|
SQL 存储 数据库
|
4月前
|
安全 数据管理 关系型数据库
深入理解数据库主键
【8月更文挑战第31天】
126 0
|
4月前
|
SQL 存储 NoSQL
从SQL到NoSQL:理解不同数据库类型的选择与应用——深入比较数据模型、扩展性、查询语言、一致性和适用场景,为数据存储提供全面决策指南
【8月更文挑战第31天】在信息技术飞速发展的今天,数据库的选择至关重要。传统的SQL数据库因其稳定的事务性和强大的查询能力被广泛应用,而NoSQL数据库则凭借其灵活性和水平扩展性受到关注。本文对比了两种数据库类型的特点,帮助开发者根据应用场景做出合理选择。SQL数据库遵循关系模型,适合处理结构化数据和复杂查询;NoSQL数据库支持多种数据模型,适用于非结构化或半结构化数据。SQL数据库在一致性方面表现优异,但扩展性较差;NoSQL数据库则设计之初便考虑了水平扩展性。SQL使用成熟的SQL语言,NoSQL的查询语言更为灵活。
104 0
|
5月前
|
存储 Oracle 关系型数据库
关系型数据库Oracle备份类型与频率
【7月更文挑战第21天】
100 6