设计实现数据库表扩展的7种方式

设计实现数据库表扩展的7种方式

免费 开朗的高级母亲和成年的女儿一起使用智能手机 素材图片

 在软件开发过程中,数据库是一项关键技术,用于存储、管理和检索数据。数据库表设计是构建健壮数据库系统的核心环节之一。然而,随着业务需求的不断演变和扩展,数据库表中的字段扩展变得至关重要。

当表结构固定后,新增的业务需要通常会要求增加字段,这时该如何灵活实现字段扩展呢?本文提供以下几点设计思路,以平衡灵活性和可扩展性,确保数据库系统能够适应不断变化的需求。

使用预留字段

在表设计初期,可以预留一些命名通用的备用字段,例如field1、field2、field3。当业务需要增加新字段时,就直接使用这些预留字段,无需修改表结构。

例如用户表预留5个扩展字段,新需求需要记录用户注册渠道,可以直接使用field1存放,不影响旧数据和业务。

适用于需求变化较小、对表结构影响较小的场景。可以将部分非关键数据放在预留字段,实现轻量级扩展。

使用JSON字段

JSON支持内嵌文档格式,可在一个字段存储更多结构化信息。当需要新增属性时,直接在JSON字段加入新属性即可,不影响旧数据。

例如产品表的扩展信息originInfo,可设为JSON字段,后续需要增加产品线上时间,直接在originInfo加入即可。

适用于需要存储结构化扩展信息的场景。可在JSON中嵌套存储对象或数组,扩展灵活。

使用单表继承

similar类业务可设计基类表,如product_master。新类型产品创建子表product_book继承master,同时加入特有字段。查询时可union all。

例如电商商品表,可以创建书籍表、服饰表继承商品表,加入书籍特有字段。查询可以union出所有结果。

适用于同主题的类似数据类型,需要区分但相关度密切的不同业务表。继承可减少冗余。

构建属性表

设置主题属性表,类型+属性名作为联合主键,存储主题扩展信息。新属性直接增加记录即可扩展,不影响主表。

例如用户属性表,用户ID+属性名作为联合主键,值存储属性内容。需要增加用户性别时,直接新增记录。

适用于主体和属性松耦合的场景。主表存储主体,属性表存储可扩展信息,解耦影响。

CREATE TABLE `wp_postmeta` (`meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`post_id` bigint(20) unsigned NOT NULL DEFAULT '0',`meta_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,`meta_value` longtext COLLATE utf8mb4_unicode_ci,PRIMARY KEY (`meta_id`),KEY `post_id` (`post_id`),KEY `meta_key` (`meta_key`(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

使用Schema字段

指定字段为Schema数据类型,内部存储属性集合。读取时可转换为对象,实现扩展。

例如产品属性schema字段,可直接以JSON格式存储和读取扩展属性,效果与4类似。

适用于需要频繁变化的结构化扩展信息。方便直接操作Schema字段扩展属性。

使用新表继承数据

major变更可创建新表,使用触发器等自动将旧表数据复制到新表。新功能在新表操作。

例如订单表需要大改造,可建新表,触发器复制旧订单数据,新订单进入新表,支持新功能。

适用于对旧表影响太大、需要全新表结构的场景。通过触发器等继承旧数据,实现平滑衔接。

适当冗余

关键扩展需求可适当冗余字段,控制在可接受范围内。避免频繁修改表结构影响业务。

例如用户表可提前增设推荐人字段,考虑未来可能的推广需求。

适用于对某些关键扩展需求能够预见的场景。适度冗余特定字段,避免频繁影响旧表。

数据库表设计中的字段扩展是一个关键问题,需要在灵活性和可扩展性之间取得平衡。通过深入了解需求、选择合适的数据类型、使用扩展属性和关联表,以及权衡性能和查询效率,可以实现可维护和可扩展的数据库系统。在设计过程中,密切与业务团队合作,并考虑未来的需求变化,将有助于构建适应不断变化的业务环境的数据库系统。

希望这些详细的描述和举例能够帮助读者进一步理解各种实现字段扩展的设计思路。如果还有需要补充和完善的地方,请您指出,我会继续努力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/29426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[OnWork.Tools]系列 06-屏幕水印

简介 屏幕水印功能主要是在开会分享屏幕的时候在屏幕上增加水印 水印使用 水印启用和颜色设置 水印文字和大小设置 水印间距,透明度,角度调整

centos安装python3的多个版本

标题 原本安装了python3.6,但是又有一个项目需要py3.7,所以需要让两个版本共存 操作 1、下载py3.7 wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz2、解压 tar -xzvf Python-3.7.3.tgz进入到文件夹 cd Python-3.7.33、安装 本人c…

day10 快速排序 方法重载 和 方法递推

方法重载 斐波拉契数列问题 使用重载思想解决 public static int method(int n){if (n 2 ){return 1 ;}return (n-1)*2method(n-1);}public static int f(int n){if (n 1){return 1;}if (n 2){return 2;}return f(n-1)f(n-2);} 快速排序 思维很简单,类似二…

【从零单排Golang】第十三话:使用WaitGroup等待多路并行的异步任务

在后端开发当中,经常会遇到这样的场景:请求给了批量的输入,对于每一个输入,我们都要给外部发请求等待返回,然后才能继续其它自己的业务逻辑。在这样的case下,如果每一个输入串行处理的话,那么很…

C语言进阶-4

1、常用位操作符 1.1、位与& (1)注意:位与符号是一个&,两个&&是逻辑与。 (2)真值表:1&00 1&11 0&00 0&10 (3)从真值表可以看出:位与操作的特点是,只有1和1位于结果为1&…

Zookeeper 面试题

一、ZooKeeper 基础题 1.1、Zookeeper 的典型应用场景 Zookeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布和订阅。 通过对 Zookeeper 中丰富的数据节点进行交叉使用,配合 Watcher 事件通知机…

【java】【maven】【高级】MAVEN聚合继承属性等

目录 1、模块开发与设计 2、聚合 2、继承 3、属性 4、版本管理 5、资源配置 6、多环境配置 7、多环境开发配置 8、跳过测试 9、私服 前言:maven的高级使用包含分模块开发与设计、聚合、继承、属性、版本管理、资源配置、多环境配置、多环境开发配置、跳过…

Github 80 个键盘快捷键和一些搜索技巧的备忘清单

文章目录 键盘快捷键站点范围的快捷方式资料库源代码编辑源码浏览注释问题和拉取请求列表问题和拉取请求拉取请求的变化项目板通知网络图搜索技巧范围搜索文件路径完全符合布尔运算符基于仓库的条件基于 issue 的条件基于用户的条件参考网址键盘快捷键 站点范围的快捷方式 S …

Spring Cloud 的版本和SpringBoot的版本

Spring Cloud 的版本选择 Spring Cloud 和SpringBoot的版本存在对应关系 Spring Cloud 的版本和SpringBoot的版本,存在对应关系。最新的SpringCloud版本(发布文章时为2022.0.3),需要SpringBoot(3.0.9) 的…

数据分析DAY1

数据分析 引言 这一周:学习了python的numpy和matplotlib以及在飞桨paddle上面做了几个小项目 发现numpy和matplotlib里面有很多api,要全部记住是不可能的,也是不可能全部学完的,所以我们要知道并且熟悉一些常用的api&#xff0…

IDEA常用插件介绍

1.CodeGlance(CodeGlance Pro) 安装后,重新启动编译器即可。 CodeGlance是一款非常好用的代码地图插件,可以在代码编辑区的右侧生成一个竖向可拖动的代码缩略区,可以快速定位代码的同时,并且提供放大镜功能…

Flutter:文件读取—— video_player、chewie、image_picker、file_picker

前言 简单学习一下几个比较好用的文件读取库 video_player 简介 用于视频播放 官方文档 https://pub-web.flutter-io.cn/packages/video_player 安装 flutter pub add video_player加载网络视频 class _MyHomePageState extends State<MyHomePage> {// 控制器late…

centos8.5本地yum源报错

在下载文件出现以下错误 [rootserver ~]# yum install gcc Updating Subscription Management repositories. Unable to read consumer identity This system is not registered with an entitlement server. You can use subscription-manager to register. RHEL8.5-BaseOS …

rust实践-异步并发socket通信

客户端 [package] name "rust_client" version "0.1.0" edition "2021"[dependencies] tokio { version "1.14.0", features ["full"] }use tokio::io::{self, AsyncReadExt, AsyncWriteExt}; use tokio::net::TcpSt…

典型移动APP安全风险提醒

研究背景 随着互联网和移动设备的发展&#xff0c;手机已成为人人都拥有的设备&#xff0c;各式各样的App更是丰富了人们的生活&#xff1a;从社交到出行、从网购到外卖&#xff0c;从办公到娱乐等&#xff0c;App已成为大众生活必需品。然而&#xff0c;App的流行使人们对App…

rust基础

这是笔者学习rust的学习笔记&#xff08;如有谬误&#xff0c;请君轻喷&#xff09; 参考视频&#xff1a; https://www.bilibili.com/video/BV1hp4y1k7SV参考书籍&#xff1a;rust程序设计语言&#xff1a;https://rust.bootcss.com/title-page.htmlmarkdown地址&#xff1a;h…

Blazor前后端框架Known-V1.2.11

V1.2.11 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 Gitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;https://github.com/known/Known 概述 基于C#和Blazo…

跨境电商中的安全挑战与隐擎Fox指纹浏览器的应用

随着全球互联网的蓬勃发展&#xff0c;跨境电商已经成为了国际贸易的重要组成部分。然而&#xff0c;跨境电商的迅速崛起也伴随着一系列安全挑战&#xff0c;其中之一就是恶意活动和隐私泄露。为了应对这些挑战&#xff0c;诸多技术手段被开发出来&#xff0c;其中隐擎Fox指纹浏…

@RequestBody注解,自定义注解

public Result update(RequestBody EmployeeDTO employeeDTO){&#xff0c;为什么要加RequestBody &#xff0c;什么时候加什么时候不加&#xff1f; 在这段代码中&#xff0c;RequestBody EmployeeDTO employeeDTO 表示将请求体中的数据解析为 EmployeeDTO 对象&#xff0c;并…

springboot启动忽略某些类

springboot启动忽略某些类 描述解决方案单拉一个提交&#xff0c;把所有的涉及kafka消费的都不注入容器通过配置ComponentScan的excludeFilters配置了不生效后续处理改之前改之后解释 总结 拆分环境 感触解决实现demo参考 描述 目前我这的开发环境和测试环境数据库是两份&#…