时间:2022-10-10 18:15:19 | 浏览:571
我毕业后进入了一家B端公司做产品,在临近转正的时候,要考核的一点是SQL查询语言的运用能力,因为工作中需要经常查询数据来辅助分析,而以往呆过的公司都不需要产品经理很懂数据库,只要会基本的SQL查询即可,就一直没有进一步了解它。
但现在随着公司对产品经理的要求越来越高,尤其是B端产品经理,懂基本的数据库设计是个很好的加分项。最近看到招聘网站上一家知名的B端公司jd里,对产品经理岗位的其中一条要求是:“了解主流数据库的原理,具备较强的数据库设计能力”。这种能力我们可以理解为基础的数据库逻辑设计能力。
而数据库分为关系型数据库和非关系型数据库,本文主要讨论的是关系型数据库。
拿知识星球来说,用户发了一条动态,数据库会建立一个索引,并将此动态存入数据区中。如果用户删掉此动态,数据库首先会删掉索引区的索引,数据区中的动态根据数据库的存储性能和容量可能会保留一段时间,保留的那段时间的状态是假删除,也叫逻辑删除。如果用户再新发布一条新的动态,新的索引和动态会直接覆盖上一条假删除的数据,此时就是真删除了,也叫物理删除。
为了防止覆盖数据后变真删除,还能这么设计:即把用户假删除的数据打上标记,存在另一个数据库表中,当要恢复数据的时候再修改标记。
基本原理弄清楚了,接下来就要思考,怎么去设计了。
简单来说,数据库设计是根据业务系统的具体需要,结合我们所选用的数据库管理系统,为这个业务系统构造出最优的数据存储模型。并建立好数据库中的表结构以及表与表之间的关联联系的过程。使之能有效的对应系统中的数据进行存储,并可以高效的对已经存储的数据进行访问。
数据库相当于一个大楼的地基,如果地基打好了,大楼就会稳固,否则就很容易轰然倒塌。
那么好的数据库设计和糟糕的数据库设计有什么特点呢?
(1)需求分析
第一步要进行需求分析,梳理出系统中所要存储的数据属性、存储特点和生命周期。
比如有的数据有时效性,有的数据无时效性。有实效性的数据可以采取过期清理的方式来进行存储,比如小米云服务里的用户主动删除的照片、视频、便签等数据会进入回收站保留一定期限,到期后回收站自动清空。
还有的数据增长很快数据量也很大,但不是核心数据,那就可以采用分库分表的方式进行存储,也叫数据库表的水平拆分。
比如我前公司的一个大客户给他们的用户发了大量的邮件,系统会不断的返回相关的状态信息数据,这些数据都在一张表里,当这些数据达到百万甚至千万级别时,用户查询数据的效率和速度都会降低,在界面上的体现是会发现搜索或跳转页面的时候特别卡,这个时候对数据库进行分库分表就是个不错的方案。
举一个我以前做的RBAC权限管理功能为例子,这个功能包括组织架构模块、角色模块、菜单权限模块、人员管理模块这四个核心模块,复杂一点的还会有其他模块,在这里不做说明。
我们设计好原型图之后,可以梳理出各个模块实体的主键、外键以及其他的属性。其中主键是唯一标识一条记录的,比如每个学生的学号是唯一的,学号就是一个主键。外键是用来和其他表建立联系用的,A表的外键往往是B表的主键。
组织架构模块:
角色模块:
菜单权限模块:
人员管理模块:
(2)逻辑设计
第二步是逻辑设计,也是产品经理要重点学习的。
我们将上述模块的需求转化为数据库的逻辑模型,一般用ER图表示。
简易版可以在纸上画出来,作为初稿:
输出的图例规范如下:
矩形表示实体集,菱形表示联系集,椭圆表示实体的属性,线段表示两者之间的连接。
运用数据库范式设计具体的表:
数据库的范式有很多种,包括第一范式、第二范式、第三范式等等,这些设计范式的晦涩的术语定义不会出现在本文中。直接用相关的案例将它们描述出来,相信能够被更多人看懂。
第一范式:
采用这种范式设计出来的是一张二维表,且这种二维表的字段是不可以继续再分的,比如“联系方式”字段下面不能再拆分为“邮箱”和“电话”两个字段。这也是最简单且最容易遵守的一种范式。举个例子,下面的表格就是符合第一范式的。
第二范式:
这种范式是在第一范式的基础上定义的,下面的表中结合了组织架构和人员管理两张表的属性。
所以符合第二范式的表如下:
【人员管理表】
【组织架构表】
【关联表】
第三范式:
这种范式是在第二范式的基础上定义的,下面这张表包含了组织架构、人员管理和角色管理这三张表的属性。
大家可以看到,一个组织架构下面会有很多用户,一个用户也会有很多角色。所以按照第三范式设计的表如下:
【人员管理表】
【组织架构表】
【角色表】
【关联表】
小结:第一范式和第二范式的区别在于有没有分出两张表,第二范式是说一张表中包含了多种不同的实体属性,那么必须要分成多张表, 第三范式是要求已经分成了多张表,那么一张表中只能有另一张表中的主键,而不能有其他的任何信息(其他的信息一律用主键在另一表中查询)。
其实除了以上三个范式,还有第四、第五、BC以及反范式化设计,这里不做扩展,有兴趣的可以自行查询了解。
综上,结合范式和ER图输出的表结构如下:
为了方便理解,表中的属性字段命名我写成了中文,实际上在数据库里都是英文,比如用户id可以命名为UserId,命名的工作在物理设计中进行,一般是架构师去处理。
(3)物理设计
第三步是物理设计,一般是架构师做的事,产品经理简单了解下即可,同样也不做扩展说明。
了解了以上的知识并不能使你精通数据库,尤其是像这种底层的东西,仅靠一篇文章是很难完全掌握的。比如在业务需求、性能和数据冗余之间达到一个平衡就需要深厚的数据库功底。
但通过本文可以了解最基础的数据库逻辑设计应该怎么做,会对业务系统的技术实现有更深刻的认识,若有SQL基础则能更容易理解。
本文由 @葩说产品 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于CC0协议
来源 | 大数据透析站这是什么水平?作为苏南模式的代表之一,无锡可不是吃素的,按照现在流行的算法,1无锡≈1黑龙江省≈4.3青海省。按照2021年6.45的平均汇率换算,江苏的GDP高达1.8万亿美元,超过澳大利亚、俄罗斯、韩国,略低于全球
8月9日,汉阳区委组织部、汉阳团区委共同举办了“匠心汉阳 • 逐梦华章 -- 工程设计制造”主题活动,这是“一起向未来·学子游汉阳”系列活动的第二场。接下来,汉阳区还将围绕“数字经济、大健康、会展文旅、智能制造”等主导产业陆续开展系列活动。
米-17系列现在基本替代了“黑鹰”称为了绝对主力 30年的“黑鹰”现在应急用长期以来,在中国陆航部队中,能够担负高海拔地区运输的只有从美国引进的S-70“黑鹰”中型直升机。那段时间,能够爬上4500米以上高海拔地区的只有“黑鹰”,而且中国的
濉溪县数据资源局到县城管局、市大数据中心开展数字濉溪走访调研为了解淮北市、濉溪县大数据发展现状和趋势,促进濉溪县大数据快速发展,推进“数字濉溪”建设,9月16日,濉溪县数据资源局党组书记、局长刘溪带领全体职工到濉溪县城管局、淮北大数据中心进
人们常说,“失败是成功之母”,很多人都经历过失败,也有很多人失败后继续努力获得了成功,比如张弼士就是其中之一。清朝朝光绪年间,张弼士修酒窖屡建屡败,后来用了一个妙招才成功,他究竟是怎么做的呢?下面小编来给您揭秘。(本文所有图片,全部来自网络
广东(佛山)工博会将于2021年8月27日-30日在佛山潭洲国际会展中心举办,大族激光邀您参观广东(佛山)工博会 展位号为:6号馆H01匠心于专业技术的科研 致力于智能化黑灯工厂打造中国是激光设备的最大市场,国内外激光加工技术在不断进步,国
形状宛若木棉花绽放、设计感十足的T3要来啦!9月27日,广州白云国际机场三期扩建工程(简称“白云机场三期扩建工程”)开工。未来原T1和T2航站楼将连接成一个整体,组成白云机场第一航站区。以本期规划的T3航站楼和综合交通中心、停车楼为主,将构
模式设计是什么?初学者一开始会被这高大上的名称给唬住。而对于有丰富编程经验的老鸟来说,模式设计又是无处不在。很多接触的框架就是基于各种模式设计形成的。 简单说,在写代码的过程中一开始往往接触的是面向过程的,简单的基础的编程。这个时候我们往往
为什么要学习PHP?这个问题可能困扰着很多PHP初学者和爱好者,可能最实在的理由就是----PHP相关工作岗位很多。在“见到” PHP的第一面并不会感觉到此物有多么惊艳和神奇,但经历了漫长的学习和接触之后,你会发现它是如此的让人神往和愉悦。