MySQL学习笔记(四)数据库设计

发布时间:2026/10/23 10:13:56

MySQL学习笔记(四)数据库设计 数据库设计就是根据业务规划表、字段、表和表之间的关系。目标少存重复数据、数据不出错、查询速度够用。一、4个核心设计目标减少数据冗余同样的数据不要重复存多份避免改一处、别处没同步保证数据完整不让脏数据存入数据库性能够用查询不要太慢方便后续改需求二、数据库设计完整流程需求分析搞清楚系统里有哪些事物实体、它们有什么信息、事物之间有什么联系。不要上来就写建表SQL概念设计 ER模型实体现实对象例学生、课程属性对象的信息例学生姓名、手机号关系一对一一个A对应一个B一对多一个A对应多个B最常用多对多A和B互相多对多必须新建中间表不能直接存逗号分割id逻辑设计把ER模型翻译成表定主键、外键。物理设计写SQL确定字段类型、约束、索引。维护迭代测试后续根据需求修改。三、三大范式范式是一套设计规范考试常考开发中不用死板死守。1NF 第一范式原子性一个单元格只存一份信息不能把多个信息塞同一个字段。错误contact13800001111;zhangsanqq.com正确拆成手机号、邮箱两个字段。2NF 第二范式消除部分依赖一张表尽量只描述一件事物。如果是联合主键所有字段都要完整依赖全部主键。3NF 第三范式消除传递依赖表中字段不要间接推导出来。比如学生表不要写学院名称只存学院id学院名称放在学院表。重点允许反范式。为查询更快可以少量冗余字段但要自己保证数据同步。四、主键、外键零基础要点主键PRIMARY KEY唯一标识一行优先使用AUTO_INCREMENT自增数字。不要拿手机号、身份证做主键业务信息会修改。外键FOREIGN KEY用来关联两张表。注意MySQL外键会降低性能。五、SQL示例多对多中间表是重点-- 学生表CREATETABLEstudent(stu_idINTPRIMARYKEYAUTO_INCREMENTCOMMENT学生编号主键自增,stu_nameVARCHAR(32)NOTNULLCOMMENT学生姓名不能为空,phoneVARCHAR(16)UNIQUECOMMENT手机号不能重复)ENGINEInnoDBDEFAULTCHARSETutf8mb4;-- 课程表CREATETABLEcourse(course_idINTPRIMARYKEYAUTO_INCREMENTCOMMENT课程编号,course_nameVARCHAR(64)NOTNULLCOMMENT课程名称,creditTINYINTNOTNULLCOMMENT学分)ENGINEInnoDBDEFAULTCHARSETutf8mb4;-- 多对多中间表学生选课记录学生选了什么课、分数CREATETABLEstu_course(idINTPRIMARYKEYAUTO_INCREMENT,stu_idINTNOTNULLCOMMENT关联学生表主键,course_idINTNOTNULLCOMMENT关联课程表主键,scoreDECIMAL(5,2)COMMENT考试分数,-- 作业考试可以写外键约束FOREIGNKEY(stu_id)REFERENCESstudent(stu_id),FOREIGNKEY(course_id)REFERENCEScourse(course_id))ENGINEInnoDBDEFAULTCHARSETutf8mb4;六、易踩坑点什么数据都塞一张大表里拿手机号、姓名这类业务字段当主键字段大量允许NULL尽量给默认值多对多图省事用1,2,3字符串存id不建中间表无法做联表查询死磕三范式拆几十张表查询需要大量JOIN速度很慢字段类型选错手机号用int开头0丢失、时间存字符串小结做数据库设计先想业务实体和关系再写SQL。范式作为参考不是铁律平衡数据冗余、一致性、查询速度。
延伸阅读

更多相关文章

2026/10/20 16:59:43

基于java+springboot的志愿者招募管理系统(源码+lw+部署文档+讲解等)

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

2026/10/23 10:13:25

openpilot CAN通信延迟优化实战:3步把转向响应砍半

openpilot CAN通信延迟优化实战:3步把转向响应砍半 【免费下载链接】openpilot openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars. 项目地址: https://gitcode.com/GitHub_Trending/o…

2026/10/23 1:55:47

30天再进化!2026世界机器人大会,宇泛「灵猫」腾跃而来

8月19日至23日,宇泛智能(UNIUBI AI)全栈自研的四足机器人「灵猫 Cyvet」登陆2026世界机器人大会。距世界人工智能大会首发亮相之后仅30天,「灵猫」再度进化——全新解锁背越式跳高1米、立定跳远近2米两大运动特技,叠加…

2026/10/23 10:09:56

JSP隐式对象与四大作用域详解:从原理到实战避坑

1. 从一次“数据莫名消失”的调试说起做 JSP 开发的人,几乎都经历过这样的场景:明明在页面里把数据塞进去了,翻到下一个页面却怎么也取不出来;或者同一个变量,在 A 页面是值,在 B 页面变成了 null&#xff…

2026/10/23 10:09:56

Django手机商城实战:SPU+SKU架构与订单状态机

简介:这是一份基于Django框架开发的Python全栈实战项目——手机商城,面向具备基础Python和Web开发能力的学习者,适用于全栈入门实践、课程设计或毕业设计参考。项目采用前后端分离架构:后端使用Django构建管理后台与API服务&#…

2026/10/23 10:09:56

货道绑定-DeviceProduct与slotNo库存模型

07-货道绑定-DeviceProduct与slotNo库存模型系列:URM Ultra 商品/设备/订单/支付/视觉 业务实战篇 主角:设备域的「货道绑定」——把一台售货柜的每个格子,跟具体商品、库存、售价绑在一起。 适合人群:没写过自动售货柜后端、但会…

2026/10/23 10:09:56

设备管理接口-从分页到心跳

06-设备管理接口-从分页到心跳系列:URM Ultra 商品/设备/订单/支付/视觉 业务实战 主角:urm-server 后端 device 域 AdminDeviceController DeviceService上篇(第 05 篇)我们把 Device 实体拆透:它是双门智能柜的电…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑