首页/新闻资讯/正文详情

砍掉不必要的中间表:利用 JSON 字段简化模型

发布时间:2026/9/26 4:45:51 来源:云帆数科 栏目:资讯中心
砍掉不必要的中间表:利用 JSON 字段简化模型
砍掉不必要的中间表利用 JSON 字段简化模型在传统的关系型数据库RDBMS设计中很多工程师受第三范式3NF的教条束缚过深一旦实体包含一些非核心的动态属性或标签列表立刻在数据库里拆出一张“关联中间表”。比如一个用户表需要存“用户偏好设置主题、通知开关、语言”就建一张user_preferences表需要存“用户的多个社交主页链接”又建一张user_social_links表。结果一个原本简单的单体系统数据表数量迅速膨胀到上百张。每次查询用户详情都要做三四个LEFT JOIN联表查询不仅 SQL 极其臃肿晦涩数据库的查询性能也大打折扣。在现代关系型数据库PostgreSQL JSONB / SQLite JSON / MySQL JSON已经极其成熟的今天用单个 JSON 字段替代多余的关联中间表是极简架构中大幅简化数据模型的利器。什么时候果断使用 JSON 字段满足以下三个特征的数据强烈建议直接存入主表的 JSON 字段中随主实体同生共死Cascaded Lifecycle这些属性只属于当前主实体永远不会被其他实体独立引用读写高度绑定Read/Write Together每次读取或更新主数据时几乎总是连带这些属性一起读写字段结构具有动态扩展性Dynamic Schema不同用户的属性键值可能完全不同未来可能会频繁增减小字段不需要每次改动都跑一次危险的数据库 DDL 迁移。实战对照PostgreSQL JSONB 的优雅简化-- 优化前过度规范化拆分了 3 张表查询需要多次 JOIN -- users (id, name, email) -- user_settings (user_id, dark_mode, email_notify, lang) -- user_metadata (user_id, custom_avatar_url, bio, github_url) -- 优化后收敛为单一表结构零关联查询 CREATE TABLE users ( id BIGSERIAL PRIMARY KEY, name VARCHAR(64) NOT NULL, email VARCHAR(128) NOT NULL UNIQUE, -- 核心动态属性统一收敛在 JSONB 字段中 settings JSONB NOT NULL DEFAULT {theme: light, notify: true, lang: zh-CN}, profile JSONB NOT NULL DEFAULT {}, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- 为 JSONB 内部特定高频字段创建专用索引极速检索 CREATE INDEX idx_users_lang ON users ((settings-lang));TypeScript 实体映射与类型安全在代码层面利用 TypeScript 的接口强类型定义依然能够享受 100% 的编译期类型安全与 IDE 智能补全export interface UserSettings { theme: light | dark; notify: boolean; lang: string; } export interface UserProfile { bio?: string; githubUrl?: string; avatarUrl?: string; } export interface UserEntity { id: string; name: string; email: string; settings: UserSettings; profile: UserProfile; } // 查询出的数据天然即是嵌套对象零二次组装耗时 export async function getUserById(id: string): PromiseUserEntity | null { const result await db.query(SELECT * FROM users WHERE id $1, [id]); return result.rows[0] || null; }极简收益总结消灭 50% 以上的多余中间表数据库表结构一目了然新成员花 10 分钟就能看懂核心 ER 图查询性能大幅提升单主键索引点查Index Scan即可一次性获取全部完整数据彻底消灭联表产生的临时表与内存排序DDL 迁移心智负担归零增加一个小配置项只需在代码类型里加一行数据库不需要执行任何阻塞写锁的ALTER TABLE。总结范式是用来指导设计的不是用来捆绑手脚的。善用现代数据库的 JSONB 能力砍掉冗余中间表让数据模型回归简单与高效。

相关推荐

阿里云ECS上基于kubeadm搭建Kubernetes最新稳定版集群实践
阿里云ECS上基于kubeadm搭建Kubernetes最新稳定版集群实践

3台阿里云服务器,一个下午,把Kubernetes集群最新稳定版完整跑通,这事说难不难,但你要是在网上搜教程,大概率会卡在镜像拉取、安全组、containerd配置这几个地方。这篇文章就把我2026年3月11日这次实操的完整过程整理出… · 2026/9/26 4:45:45

边缘多源流式数据聚合:基于 Streams API 的低内存管道
边缘多源流式数据聚合:基于 Streams API 的低内存管道

边缘多源流式数据聚合:基于 Streams API 的低内存管道在小工具的后端网关中,当用户请求生成一份包含**“上游大模型流式思考 天文月相数据 个人历史习惯统计 本地古诗词推荐”**的复合长手账画报时,传统的服务端聚合方式通常是&#xff1a… · 2026/9/26 4:45:45

Vue.js渐进式框架实战:从入门到工程化与面试考点全解析
Vue.js渐进式框架实战:从入门到工程化与面试考点全解析

做过几年前端之后回看,我对Vue.js最服气的一点,恰恰是“渐进式框架”这个定位。它不是那种逼你全量拥抱的“全家桶式”框架,而是允许你从一个页面、一个按钮、一个组件开始,一点一点把整个前端工程带起来。这个设计哲学&#xff0… · 2026/9/26 4:45:39

产教融合落地路径:工业软件与人工智能如何重塑数智人才培养
产教融合落地路径:工业软件与人工智能如何重塑数智人才培养

1. 数智时代的教育困局与破局思路——为什么产教融合是必然选择1.1 从企业视角看人才缺口到底有多大这几年人工智能的落地速度远超高校课程更新的节奏。我经常和做工业软件、做智能制造的同行聊,大家最头疼的事几乎一致——招不到合适的人。不是说市场上没有人工智能… · 2026/9/26 6:34:54

JVM内存模型:理解Java程序的内存管理_jvm 内存模型,jvm 怎么管理的-CSDN博客
JVM内存模型:理解Java程序的内存管理_jvm 内存模型,jvm 怎么管理的-CSDN博客

首屏导读 本教程配套付费专栏: 大模型工程师修炼手记 19.9 元(AI 编程 / Agent 实战 | 本文同主题系统课程) AI时代程序员的自我提升 49.9 元(AI 时代成长方法论)。 单篇不过瘾?订阅解锁全量源… · 2026/9/26 6:34:54

RoundTable v1.0.0-rc.1:可辩论、可拍板、可落盘的多模型会议
RoundTable v1.0.0-rc.1:可辩论、可拍板、可落盘的多模型会议

我让三个大模型互相当红队:一个多模型圆桌插件的架构、踩坑与一次被否掉的方案 先说结论,免得你翻到最后: 多模型协作 ≠ 多问几个模型。 并列回答解决的是"覆盖率",会议解决的是"收敛"——后者需要主持人、需… · 2026/9/26 6:34:48

codex-desktop-linux 远程手机控制完整指南:如何用移动端远程驱动Linux桌面Codex
codex-desktop-linux 远程手机控制完整指南:如何用移动端远程驱动Linux桌面Codex

codex-desktop-linux 远程手机控制完整指南:如何用移动端远程驱动Linux桌面Codex 【免费下载链接】codex-desktop-linux Unofficial ChatGPT desktop app for Linux (formerly the Codex app), built locally from OpenAI’s official macOS app. Includes Chat, Wo… · 2026/9/26 6:34:42

生活 不会一帆风顺
生活 不会一帆风顺

生活从不会一直一帆风顺,难免会遇到疲惫、迷茫,甚至觉得努力看不到结果的时候。很多时候不是你不够好,只是沉淀需要时间,所有默默付出的汗水,都在悄悄积攒力量,不必急于求成,也别轻易否定自己。… · 2026/9/26 6:34:42

皮尔逊、斯皮尔曼、肯德尔:三种相关性分析方法实战选型指南
皮尔逊、斯皮尔曼、肯德尔:三种相关性分析方法实战选型指南

1. 为什么“相关性不等于因果”这句话被反复强调——从一场真实业务事故说起去年我参与一个电商用户复购预测项目,团队用皮尔逊相关系数发现“用户浏览商品详情页时长”与“7日内复购率”呈现0.82的强正相关。产品同学当场拍板:立刻上线“延长详情页停留… · 2026/9/26 6:34:42

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码