如何设计字段?你需要知道数据库设计范式
起因
刚接触互联网时,从事的是前端岗位,跟一个40多岁的老大哥合作项目,项目推进的时候老大哥各种摆谱不按计划来,那种被扼住咽喉的感觉让我暗下决心,一定要能独挡一面,一个人要有搞定一个项目的能力和视野。最后被逼成为了一个伪全栈。窘迫感
当自己真有能力搞定前后端的时候,发现在设计数据库的时候很困难。这个字段该不该放这个表?这个表该不该设置一个冗余字段避免联表查询?复杂的表字段很多的时候该不该拆分?
刚开始接触后段开发,一个项目设计到开发能正常运行就开心到飞起了。后来熟练一些后发现很多跟数据库设计的问题涌上来了,总感觉设计得很别扭。就在想有没有参考标准或者规范?还真有!
数据库范式
本文不作为一个面面俱到的文章,尽量帮助想尝试自己设计数据库的(前端Or其他)小伙伴自己设计出符合基础规范的数据库,少走一些弯路。同时也作为自己的经验总结,写成文章作为重构复盘参考
数据库范式规定的是数据表之间字段联系合理性程度。符合范式设计的数据库具有如下好处数据结构冗余最小化数据表操作是否方便数据操作高性能第一范式
数据表中每一个字段具有原子性,不可再分
学生编号
学生姓名
地址
1hr张雷
陕西省西安市未央区
2hr赵芬
湖南省长沙市芙蓉区
地址字段不符合第一范式,可再分
省
市
区
区
1hr陕西省
西安市
未央区
2hr湖南省
长沙市
芙蓉区第二范式
表中每列字段都要跟数据表主键关联,不要出现部分依赖
学生编号
学生姓名
课程名称
分数
1hr张雷
语文
150hr2hr赵芬
物理
100hr课程名称和分数字段不符合第二范式,两个字段跟主键编号没有太大关联
学生编号
课程名称
分数
1hr语文
150hr2hr物理
100第三范式
表中每列字段都要跟数据表主键直接关联,不要出现传递依赖
学生编号
学生姓名
课程编号
课程名称
代课老师
分数
1hr张雷
1hr语文
刘老师
150hr2hr赵芬
2hr物理
周老师
100hr课程名称、代课老师和分数不符合第三范式,这些字段依赖课程编号,课程编号依赖学生编号,存在传递依赖。且课程相关继续拓展字段,会产生更多的依赖
学生分数记录表
学生编号
课程编号
分数
1hr2hr150hr2hr1hr100hr课程相关表
课程编号
课程名称
代课老师
1hr语文
刘老师
2hr物理
周老师题外话
专注能力和自我定位很重要。如果不是被迫成为全栈工程师,尽量把精力集中在自己擅长的领域,如果你想纵向发展,就专注某一个技术点成为No1。如果你想独当一面,可以独自完成一个项目,为创业做准备可以考虑把视野放开,创业前期,你所有会的技能都能帮你抵御一些投入成本和风险。(专业的事交给专业的人做、合作共赢这两句话绝对没错,但是大部分人白手起家创业,都不具备这种前提条件。。。)
作者:winyh
链接:https:juejin。cnpost7168822614096347172