Node系列 · 数据库:数据库设计
Node系列 · 数据库数据库设计数据库设计的核心是用合理的表结构存储数据并用约束保证数据不脏不漏。本章覆盖 SQL 三分支、库表操作、主外键、三种表关系、三大范式——掌握这些就能独立设计中等规模业务库。一、SQL 三分支回顾分支用途关键字DDLData Definition Language库 / 表 / 字段结构CREATE/DROP/ALTERDMLData Manipulation Language行级操作INSERT/UPDATE/DELETEDCLData Control Language权限GRANT/REVOKE二、管理库2.1 创建数据库CREATEDATABASEtestDEFAULTCHARACTERSETutf8mb4;反引号包名是好习惯避免和关键字冲突DEFAULT CHARACTER SET utf8mb4保证默认编码支持中文和 emoji2.2 删除数据库DROPDATABASEtest;::: dangerDROP不可逆——所有表和数据一起删。生产环境几乎不会用此命令。:::2.3 查看 / 切换数据库SHOWDATABASES;USEtest;SELECTDATABASE();-- 当前所在数据库三、管理表3.1 创建表CREATETABLEtest.student(idINTUNSIGNEDNOTNULLAUTO_INCREMENT,stunoVARCHAR(20)NOTNULL,nameVARCHAR(50)NOTNULL,sexBIT(1)NOTNULLDEFAULTb0,phoneVARCHAR(20)DEFAULTNULL,birthdayDATEDEFAULTNULL,created_atDATETIMENOTNULLDEFAULTCURRENT_TIMESTAMP,PRIMARYKEY(id),UNIQUEKEYuk_stuno(stuno),KEYidx_phone(phone))ENGINEInnoDBDEFAULTCHARSETutf8mb4COMMENT学生表;字段类型速查类型用途示例INT/BIGINT整数id INT UNSIGNEDVARCHAR(n)变长字符串name VARCHAR(50)CHAR(n)定长字符串code CHAR(6)TEXT长文本文章内容DECIMAL(m,n)精确小数price DECIMAL(10,2)DATETIME/TIMESTAMP日期时间created_at TIMESTAMPBIT(1)布尔0/1is_active BIT(1)JSONJSON 数据MySQL 5.7metadata JSON3.2 修改表加字段、删字段、改字段、改类型——都用ALTER TABLE-- 加字段ALTERTABLEstudentADDCOLUMNemailVARCHAR(100)NULLAFTERphone;-- 改字段类型ALTERTABLEstudentMODIFYCOLUMNnameVARCHAR(100)NOTNULL;-- 改字段名 类型ALTERTABLEstudentCHANGECOLUMNphonemobileVARCHAR(20)NULL;-- 删字段ALTERTABLEstudentDROPCOLUMNbirthday;-- 改表名ALTERTABLEstudentRENAMETOstudents;3.3 删除表DROPTABLEstudent;四、主键与外键4.1 主键Primary Key主键 唯一标识一行数据的字段或字段组合。设计原则每张表都要有主键InnoDB 引擎强制要求主键值唯一、NOT NULL、永不修改推荐用自增整数BIGINT AUTO_INCREMENT或雪花 ID不要用业务字段身份证号、订单号做主键——业务会变PRIMARYKEY(id)4.2 外键Foreign Key外键 一个表里的字段引用另一个表的主键。作用保证引用完整性不会引用不存在的行自动级联删除/更新父表记录时联动子表CREATETABLEscore(idINTUNSIGNEDNOTNULLAUTO_INCREMENT,student_idINTUNSIGNEDNOTNULL,subjectVARCHAR(50)NOTNULL,scoreDECIMAL(5,2)NOTNULL,PRIMARYKEY(id),KEYidx_student(student_id),CONSTRAINTfk_score_studentFOREIGNKEY(student_id)REFERENCESstudent(id)ONDELETECASCADEONUPDATECASCADE)ENGINEInnoDBDEFAULTCHARSETutf8mb4;::: warning生产项目里慎用外键约束。理由每次写入都要检查一致性性能开销分布式系统下跨库外键无法落地应用层用事务控制引用完整性更灵活:::五、表之间三种关系5.1 一对一A 表的一行对应 B 表的一行。常用于主表 扩展表拆分user (id, name, email) user_profile (user_id PK, avatar, bio) -- user_id 既是主键也是外键5.2 一对多A 表的一行对应 B 表的多行。最常见class (id, name) └─ student (id, class_id → class.id)student.class_id是外键引用class.id。5.3 多对多A 表的一行对应 B 表的多行反之亦然。必须借助中间表student (id, name) course (id, title) └─ student_course (student_id, course_id, score)student_course是中间表student_id和course_id组合为主键联合主键。六、三大设计范式范式是数据库设计的卫生标准。遵守得越严格数据冗余越少但查询复杂度越高。第一范式1NF字段不可分割-- ❌ 违反 1NFaddress 字段可拆分成省市区nameVARCHAR(50),addressVARCHAR(200)-- 广东省深圳市南山区...-- ✅ 符合 1NFnameVARCHAR(50),provinceVARCHAR(20),cityVARCHAR(20),districtVARCHAR(20)第二范式2NF非主键列必须依赖整个主键针对联合主键-- ❌ 违反 2NFstudent_name 只依赖 student_id不依赖 subjectPRIMARYKEY(student_id,subject),student_nameVARCHAR(50),-- 只依赖 student_idscoreDECIMAL(5,2)-- 依赖整个主键-- ✅ 符合 2NF拆表student(id PK,student_name)score(student_id,subject,score,PRIMARYKEY(student_id,subject))第三范式3NF非主键列不能传递依赖-- ❌ 违反 3NFclass_name 依赖 class_idclass_id 依赖 id传递idINTPRIMARYKEY,class_idINT,class_nameVARCHAR(50),-- 依赖 class_id不是直接依赖 id-- ✅ 符合 3NF拆出 class 表student(id PK,class_id FK)class(id PK,class_name)范式的实际取舍::: tip不要死守范式。互联网项目经常反范式——刻意冗余一些字段如student.class_name直接存在student表里来换取查询性能。范式是基础规范不是金科玉律。:::七、最佳实践场景推荐表设计每张表加id BIGINT AUTO_INCREMENT PRIMARY KEYcreated_at/updated_at命名表名小写复数users字段名小写下划线user_id字段类型金额用DECIMAL而非FLOAT布尔用TINYINT(1)或BIT(1)字符集全部utf8mb4不要用utf8那是 MySQL 的 3 字节阉割版存储引擎InnoDB默认唯一支持事务、外键、行锁主键策略单机用自增分布式用雪花 ID / UUID索引WHERE / JOIN 频繁的字段建索引避免过度索引写入会变慢八、小结SQL 三分支DDL结构/ DML数据/ DCL权限DDL 操作库 / 表CREATE/ALTER/DROP主键保证行唯一外键保证引用完整但生产慎用表关系三种一对一、一对多、多对多多对多必须中间表三大范式减少冗余但实战要权衡查询性能——反范式是常见做法工程实践表必带idcreated_at/updated_at、全用utf8mb4和InnoDB

相关新闻

【Bug已解决】How do I use Claude Code through AWS bedrock? 解决方案

【Bug已解决】How do I use Claude Code through AWS bedrock? 解决方案

【Bug已解决】How do I use Claude Code through AWS bedrock? 解决方案 一、现象长什么样 你想让 Claude Code(命令行)走 AWS Bedrock 后端调用 Claude,而不是默认的 Anthropic 直连(可能是为了用企业 AWS 账号、合规…

2026/8/22 18:10:10 阅读更多 →
华为杯数学建模F题实战:数据驱动建模与多目标优化全解析

华为杯数学建模F题实战:数据驱动建模与多目标优化全解析

1. 从“华为杯”F题看数学建模竞赛的实战破局思路每年一到“华为杯”研究生数学建模竞赛(现在官方名称是“中国研究生数学建模竞赛”,但大家还是习惯叫华为杯)开赛,各大高校的实验室、自习室就弥漫着一股紧张又兴奋的气息。对于很…

2026/8/22 18:10:10 阅读更多 →
C++函数模板与普通函数调用规则解析:编译器如何选择最佳匹配

C++函数模板与普通函数调用规则解析:编译器如何选择最佳匹配

1. 当模板遇上普通函数:一场关于“谁更合适”的较量在C的泛型编程世界里,函数模板无疑是一把利器,它让我们能写出与类型无关的通用代码。但当我们把函数模板和普通函数放在同一个作用域里,编译器在遇到一个函数调用时,…

2026/8/22 18:10:10 阅读更多 →

最新新闻

基于Python+flask的商品购物系统的设计与实现毕业设计项目源码

基于Python+flask的商品购物系统的设计与实现毕业设计项目源码

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/22 19:01:35 阅读更多 →
AI智能体工程实践:从技能设计到容错部署的精准任务执行指南

AI智能体工程实践:从技能设计到容错部署的精准任务执行指南

这类工具最值得先看的不是功能列表,而是能不能在普通环境里稳定跑起来。AI智能体(AI Agent)这个概念现在很热,但很多讨论都停留在“它能自主完成任务”的想象层面。真正落地时,你会发现,从“让AI干活”到“…

2026/8/22 19:01:35 阅读更多 →
3 分钟导出原神全成就:YaeAchievement 免配置实战指南

3 分钟导出原神全成就:YaeAchievement 免配置实战指南

3 分钟导出原神全成就:YaeAchievement 免配置实战指南 【免费下载链接】YaeAchievement 更快、更准的原神数据导出工具 项目地址: https://gitcode.com/gh_mirrors/ya/YaeAchievement 手抄 300 多条成就,中途被打断一次,就忘了抄到第几…

2026/8/22 19:01:35 阅读更多 →
Claude Code Token计费解析:AI编程助手成本优化与高效使用指南

Claude Code Token计费解析:AI编程助手成本优化与高效使用指南

如果你正在使用 Claude Code 这类 AI 编程助手,并且对每月账单感到困惑,甚至觉得“没怎么用就花了不少钱”,那么这篇文章就是为你准备的。你可能已经注意到,Claude Code 的计费方式与传统的订阅制或按次计费不同,它围绕…

2026/8/22 19:01:35 阅读更多 →
数学建模实战:库存定价联合优化模型构建与代码实现

数学建模实战:库存定价联合优化模型构建与代码实现

1. 从赛题到实战:一次完整的数学建模项目复盘去年国赛C题“蔬菜类商品的自动定价与补货决策”,可以说是一道非常经典的、连接理论与商业实践的题目。它没有停留在纯数学的象牙塔里,而是直接把一个真实的超市运营难题抛给了我们:面…

2026/8/22 19:01:35 阅读更多 →
简历制作与优化全攻略:从模板选择到内容精修

简历制作与优化全攻略:从模板选择到内容精修

1. 简历制作的核心痛点与解决方案作为一名有5年招聘经验的HR,我见过太多求职者在简历制作上踩坑。最常见的误区就是"一份简历走天下"——用同一份简历投递所有岗位,结果自然是石沉大海。最近我辅导了一位想转行互联网运营的朋友,他…

2026/8/22 19:00:35 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/22 18:08:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →