Vue 3 企业级项目实战课
杨文坚
前阿里前端 Leader,前腾讯 IMWeb 团队高级前端工程师
6908 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
实战篇 (19讲)
Vue 3 企业级项目实战课
15
15
1.0x
00:00/00:00
登录|注册

20|数据库方案设计:如何设计运营搭建平台的数据库?

你好,我是杨文坚。
上节课我们学习了运营搭建平台的全栈项目搭建,了解了数据库相关的内容,但是没有深入到如何根据项目做数据库方案的设计,今天我们就进一步学习数据库设计理念,完善课程项目的数据库方案设计。
为什么要用一节课来掌握项目的数据库方案设计呢?这是因为在 Web 服务项目里,只要数据库设计好,项目设计工作就基本完成一半了。
我们任何项目、任何业务逻辑的功能实现,最终都是用代码编写的程序来操作业务功能的数据,也就是说,所有功能最后都是操作数据库的读写。所以,数据库的设计等于是业务功能的设计。只要数据库设计好了,业务功能设计也就基本成型。
那么如何做项目的数据库操作方案设计呢?我们首先要理解数据库设计的技术规范。这个“技术规范”,在业界有个专业术语“数据库设计范式”。

什么是数据库设计范式?

数据库设计范式,简称“数据库范式”,也经常简称“范式”,英文为 Normal Form,简称 NF,大部分情况是面向“关系型数据库”的设计规范。
在计算机相关的教科书里,数据库设计范式是这么定义的。
“在关系型数据库里,符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”
简单理解就是,如何用合理的方式来设计项目的数据库,让数据库里各种“表”的“关系”更加清晰和简约,减少数据冗余,便于管理。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了如何设计运营搭建平台的数据库方案,包括数据库设计范式的概念和实现步骤。首先,文章详细解释了第一范式、第二范式和第三范式的概念及其应用。然后,根据第三范式的严格程度,将数据划分为员工用户数据、物料数据、物料操作快照、搭建的页面和页面操作快照等五类,并提出了相应的数据表设计方案。文章还介绍了一些技术细节,如使用UUID代替自增ID以提高安全性,以及使用JSON数据格式来提升数据操作的灵活度。最后,文章提出了SQL建表语句的设计,并介绍了如何利用Node.js环境来实现自动化建库建表的初始化操作。通过本文,读者可以快速了解数据库设计范式的重要性,以及如何根据项目需求设计数据库方案,从而更好地完成项目的数据库设计工作。整体而言,本文内容丰富,涵盖了数据库设计的多个方面,对于需要进行数据库设计的技术人员具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Vue 3 企业级项目实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • 一只鱼
    关于物料表和物料快照表有一些疑惑: 我的理解:物料表记录当前所有物料的最新信息,物料快照表记录所有物料的历史变化信息。 问题1:物料快照表是必须的吗?在这个项目中的主要作用是什么? 问题2:因为记录的是变化信息,随着时间的推移,物料快照表的数据量会不断增加,进而导致存储成本变大,怎么对其进行约束呢? 一点小建议:有5张表,估计是篇幅原因,主要对第一张用户表进行展开讲解,后续的没有详细介绍,这个能理解。但如果能有对后续几张表的讲解,以及为什么需要这几张表,那就更完美了,可以作为选读部分,不一定要放在正文中。PS: 最近正在经历第一次表设计,所以对这块比较感兴趣,希望老师能够解答。

    作者回复: 关于问题1,物料快照表是“必须准备”的,因为快照是跟着物料版本迭代的,可以跟踪每一次物料组件的更新变化,也可以知道是“谁”进行变更操作。最后为解决物料“碎片化”问题提供数据基础,这里的“碎片化”指的是,一个物料组件多个版本被多个页面引用了,借助快照来分析是否要“全量”更新物料依赖,还是继续保持碎片化支持。总之,多备份迭代数据,以备不时之需。 关于问题2,物料快照表的数据定位是辅助作用,辅助组件或者页面回滚到指定版本,不一定是要用于面向外部用户的生产环境。如果觉得数据量变大了,增加了数据库维护成本,可以对其进行定期“滚动式覆盖数据”。 最后关于您提到的建议,对于用户表的深入设计,需要考虑更多“实际业务场景”,例如“用户权限”,“用户身份分级”等等,这些情况不同企业不同部门,都有自己定义的业务逻辑。展开讲解的话不一定适用于大部分同学的实际场景。所以本课就只列举最基础的用户信息来讲解,方便后续学生根据自己业务进行扩展。

    2023-03-01归属地:广东
  • 刘大夫
    这节太棒了,想接触后端就离不开数据库,这一节的数据库设计对于前端来说可以说是引入门了,路子一下清晰了

    作者回复: 谢谢,受篇幅所限,数据库相关内容就只讲入门相关的知识,更多数据库操作知识点,可以参考本课的源码案例 https://github.com/FE-star/vue3-course/

    2023-02-10归属地:北京
  • 静心
    感觉这一节,对于前端开发来说,用处不是太大,一般的项目不会这么设计。

    作者回复: 个人想将专栏的面覆盖广一点,这样可能不同阶段都有些作用。比如如果前端遇到瓶颈也可以往全栈发展

    2023-01-12归属地:山西
  • escray
    在准备 Node.js 环境里的建库方法和建表方法的代码中,相对路径是:packages/init-database/src/util.ts, queryDatabaseSQLByPool 方法里面,使用了 poolDatabase.query 来执行 SQL 语句,但是在后面的 if-else 里面确使用了 pool,感觉似乎是一个笔误。 但是如果在代码里面修改之后,在执行完前一条操作之后会报错 Operation Platform - Database hello_vue_project create success! Operation Platform - user_info Table created sucdess node:internal/process/promises:289 triggerUncaughtException(err, true /* fromPromise */); ^ Error: Pool is closed. 有点没看明白,我感觉其实可以等所有的 SQL 语句都执行完之后,再关闭 poolDatabase 和 pool。对比来看,pool 是每次执行完都关闭(end)的,却不影响下一次的执行。
    2024-01-15归属地:江苏
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部