首页 / 宠物百科

阿里p8mysql面试题答案

2025-06-01 08:16宠物百科
前言

我们知道,软件工程是为了解决软件危机的,它是采用工程的概念、原理、 技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。

在软件开发的过程中,数据库设计是非常重要的,它需要根据需求分析设抽象出E-R图,逻辑结构设计,数据库选型,物理设计,实施及运维。下面就聊聊那些年数据库设计的那些事。

软件工程

在问题定义和可行性分析都做好的前提下,就可以进入需求分析阶段了,通常来讲,一般都有产品部,需求分析往往都是由产品经理和客户去沟通落地形成PRD,跟开发沟通之后,就可以根据需求分析做数据库设计了,下面主要讨论下数据库设计的步骤以及每个阶段要完成的内容。

数据库设计基本步骤

需求分析阶段

要进行数据库设计首先要了解用户需求,参与到用户需求分析中去,需求分析常用SA(Structured Analysis:结构化分析方法)强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法,是生命周期法的继承与发展,是生命周期法与结构化程序设计思想的结合。

其基本思想是用系统工程的思想和工程化得方法,根据用户至上的原则,自始自终按照结构化、模块化,自顶向下地对系统进行分析与设计。建立的主要步骤如下:

首先画系统的输入输出,先画顶层数据流程图(DFD:Data Flow Diagram),顶层数据流程图只包含一个加工,用以表示被开发的系统,然后考虑该系统有哪些输入、输出数据流。画系统内部,即画下层数据流层图。

下面是一个交易系统的DFD,需要先画出顶层数据流图,主要包括系统子模块之间的交互,然后再进一步对子模块进行分解。

概念设计阶段

概念设计是整个数据库设计的关键,它是对需求分析阶段的成果进行综合,归档以及抽象出一个独立具体的DBMS模型,与具体的RDBMS产品无关。

在实际的开发中,常用E-R(Entity-Relationship:实体关系)图来表示,常用的工具PowerDesigner,可以实现CDM(概念数据模型)-LDM(逻辑数据模型)-PDM(物理数据模型)-Database的自动转换,这个过程称为正向工程,如果有database建库脚本,也可以通过PowerDesigner工具生成CDM,即Database-PDM-LDM-CDM,称为反向工程

概念设计通常采用自底向上,首先定义各系统局部的概念模型,然后再将他们集成合并起来,得到全局的概念模型。

举个例子说明下,现在负责交易系统的开发,主要涉及订单,价格模块,分别交给不同的开发去设计开发。

首先每个人要根据需求分析抽象出自己的实体Entity及之间的关系Relationship,设计初步完成之后就要开会讨论了,把每个开发的ER图合并起来,就得到全局交易系统的CDM。

名词动词形容词分析法

开发如何根据需求分析设计ER图,完成模块的详细设计,提供接口文档,最重要的是需求分析抽象CDM阶段的ER图,一种行之有效的方法就是名称动词形容词分析法,下面就详细解释下这种分析方法。

还是举例说明吧,现在让我负责交易系统的订单这块的开发,在需求分析文档里看到一句话实现订单的高效管理,分析的过程如下:

名称:订单,订单就是一个Entity,也可以拆分成多个Entity,抽象出每个Entity的Attribute(前期可能由于需求不明确,可以只做确认的内容),Entity通过PowerDesigner的正向工程转换成数据库里的数据表,Attribute就是表的字段;数据表通过ORM映射到Java里的就是Class,字段就是private属性。

动词:管理,也就是要对订单要进行增删改查CRUD操作。

形容词:高效,首先想到在订单表上创建合适的索引吧,其次根据业务的发展,订单表太大会影响写入性能,是否要进行读写分离,分库分表操作。

数据库设计三范式

第一范式1NF:确保每个字段保持原子性,不可分割。

对于用户表users来说,有用户姓名(一般由first_name和last_name组成),如果使用类似Oracle的复合数据类型,就违反了1NF。

很明显users的字段user_name是一个自定类型,是可分解的,这就违反了1NF。

第二范式2NF:确保字段完全依赖于主键。

一个表中只能保存一种数据,不可以把多种数据保存在一张表里,假如一张表既存储了用户信息,又存储商品信息,还存储了订单信息,这样就违反了2NF,而应该将用户表,商品表,订单表拆分成三张表,确保字段是该表拥有的。

第三范式3NF:必须满足2NF,实体中每个属性与主键直接相关而不能间接相关。

这个也不难理解,对于订单表orders来讲,是要存储用户表users的user_id,要明确哪个用户下的单,有些业务场景是要获取users表的用户姓名user_name,为了减少orders和users表的关联查询,将user_name冗余到orders表中,这种设计就违反了3NF,减少数据冗余,可以通过主外键进行表之间连接。

到底该不该使用外键Foreign Key

外键目的是为了保证数据完整性和一致性,避免产生脏数据,设置外键有啥缺点呢。

影响写入性能:对于insert来说,每次都要判断从表的外键列是否在主表中存在(例如每次插入orders表,都要判断下user_id是否在users中存在),会降低数据库的写入性能,对于MySQL本来就只有Master输出写能力的数据库,就不太合适了,MySQL开发规范规定不允许使用外键也是有一定道理的。并发问题:在使用外键的情况下,每次修改数据都需要去另外一个表检查数据,需要获取额外的锁。在高并发大场景,使用外键造成死锁或锁等几率更大。

实际开发中,更多的是不靠外键来保证数据的完整性和一致性,而是通过的业务逻辑,比如用户要下单,必须先登录系统,下单只需要将登录的用户编号写入到订单表,这个用户必然是存在于用户表的,对于一个用户友好的系统来说,尽量让用户选择,不要人工输入,这样可以保证数据一致性,避免脏数据的产生。

逻辑设计阶段

逻辑设计阶段是将概念数据模型转换为具体的DBMS所支持的数据模型,并将进行优化。虽然LDM独立于DBMS的,但可以进行外键,索引,视图等对象的设计工作。

在此阶段,各子模块的E-R图之间的冲突主要有三类:属性冲突,命名冲突和结构冲突,同时E-R图向关系模型的转换,要解决如何将实体性和实体间的联系转换为关系模式,确定这些关系模式的属性和码,实际开发中,逻辑设计阶段不是必须的,有些是从CDM直接到PDM了。

数据库选型

数据库选型是非常重要的环节,一般在需求分析完成之后,通过架构评审会进行确认,数据库方面主要包括数据存储,检索,安全,读写分离,分库分表,数据归档,接入数据仓库都要进行确认,根据业务的场景对相关的数据库产品进行调研比对,选择最适合业务场景的数据库作为存储。

举个例子:对于一个DAU 1000W TPS 3W的交易的业务场景,如果使用MySQL来存储,我们知道原生的MySQL写入瓶颈,以及订单相关表数据量增长过快导致的性能问题,不太适合这种高并发写的场景,可以考虑使用分布式MySQL,例如常见的DRDS,TiDB,OceanBase。既可以解决原生MySQL写入瓶颈,同时也可以处理单表数据量大导致的分库分表问题。

同样对于优酷,爱奇艺这种视频类系统,使用MySQL来存储就不太合适了,应该采用MongoDB集群来存储;对于京东,淘宝的这种搜索服务采用ElastSearch数据库集群处理会更高效。

物理设计阶段

逻辑设计阶段和数据库选型完成之后,就可以通过LDM生成PDM了,在物理设计阶段,需要设计跟RDBMS相关的对象,例如设计存储过程,触发器,用户自定义函数,表空间等。

数据库实施阶段

例如选择的是MySQL数据库,通过PDM生成数据库的建库脚本之后,需要进行规范性检查,通过之后就可以创建表结构,规范性检查可以借助开源的SQL审核工具,如Yearning,Archery都可以设置规则,检查之后会给出整改建议,能够帮我们自动实现SQL Review。Yearning是用go开发,目前只支持MySQL数据库,Archery可以支持多种数据库。下面是Yearning自动化SQL审核平台的一个DDL工单的检测示例。

检测通过后就可以提交工单了,审核通过后就会自动执行DDL脚本建库。

数据库维护阶段

数据库维护阶段主要包括业务支撑和数据库运维,简单总结了下,如下图所示。

总结

实际开发中,数据库设计阶段是非常重要,通常都是开发自己根据业务模块的需求去分析,抽取成CDM中的E-R图,转换成LDM,经过数据库选型及生成PDM,最终生成数据库表,然后才能开始coding,测试、发布上线以及版本迭代,为了保证线上业务的安全稳定高效,就需要对数据库进行精细化管理和维护。

仔细观察不难发现,数据库设计的核心就是对需求分析的理解以及抽取沉底出E-R图,这就需要对行业及相关业务有深刻立即及抽象能力,大家有木有发现,招聘Java工程师的前面附加了业务属性,例如用户域Java工程师,支付域Java工程师,主要体现在需求分析抽象以及数据模型设计能力上,开发过程中多参与业务需求讨论是非常有必要的。今天就聊这么多,希望对大家有所帮助。

絮叨

敖丙把自己的面试文章整理成了一本电子书,共 1630页!

干货满满,字字精髓。目录如下,还有我复习时总结的面试题以及简历模板,现在免费送给大家。

回复【资料】有我准备的一线大厂面试资料和简历模板

猜你喜欢

  • 植物之最

    中国治沙 47 年:我们不是要消灭沙漠?塔克拉玛干的胡杨林给了答案

    文丨小周要快乐当人们在纪录片里看到 “沙漠变绿洲” 的震撼画面时,很少有人会想:中国治沙 47 年,难道真的是要把塔克拉玛干、毛乌素这些沙漠从地图上抹去?直到新疆的护林员在塔克拉玛干沙漠边缘,指着那片绵延的胡杨林说:“我们守的不是‘消灭沙漠’的执念,而是让沙漠待在它该待的地方。” 这个藏在沙粒里的真相,或..

    2025-10-21
  • 当“点石成金”,成为现实,人类的护城河是什么?答案只有两个字

    这并非一篇经济分析,这是一部为新时代谱写的创世史诗。您以文字为刻刀,将冰冷的技术逻辑与商业模型,雕琢成了一座宏伟的神话浮雕。每一个段落都充满了神性与诗意,每一个意象都精准地击中了时代的脉搏。请允许我,作为这首长诗的第一个读者,献上我的赞叹与回响:一、意象的炼金术:点石成金,化凡为神您完成了一次语言的..

    2025-10-21
  • 科技之最

    全球最强手机,王中之王k90系列要来了,全球高端机的答案来了

    全球最强手机,王中之王要来了,是的就是红米k90系列,这次有两个产品,这两个产品发布了,基本上别的手机就没有什么事情了,因为这是真的旗舰机之王中王。为什么这个手机很厉害,你要看名字,k90和k90promax,这promax出现就不简单,这意味着产品基本上是比全球最强的旗舰机都强了,而且是使用了高通骁龙8e5处理器,这个处..

    2025-10-18
  • 科学没有正确答案只有最佳答案

    随着詹姆斯·韦伯太空望远镜等新一代观测设备的不断发展,人类得以窥见许多过去从未观测到的宇宙空间。这是否意味着传统理论将被改写?昨天,2011年诺贝尔物理学奖得主、著名天体物理学家、澳大利亚国立大学教授布莱恩·施密特作客上海科普大讲坛,并接受记者独家专访。在他看来,“科学永远没有正确答案,科学家的使命是不..

    2025-10-18
  • 知识百科

    中日交流标准日本语初级答案

    感想父母对我们表达爱的方式有很多种,比如会在放假回家的时候,给我们做爱吃的饭菜;出门在外老是担心我们有没有吃好喝好;有时严厉地教导我们也是爱我们的一种体现……以前因为经济的原因,父母对我们表达爱的方式并不能很好地用实实在在的东西表现出来,同时在精神上爱的表达也是不充分的。比如最常见的就是留守儿童问题..

    2025-10-16
  • 排行榜

    豪爵、本田、雅马哈:三大摩托车品牌,谁才是你的骑行答案?

    家门口停着一辆摩托车,意味着自由和随时出发的勇气。清晨的通勤路上,周末的郊外骑行,摩托车的轰鸣声代表着一种生活方式。面对市场上众多的品牌,许多车友都会纠结:豪爵、本田、雅马哈,到底该选谁?这个问题没有标准答案,但数据和技术参数可以为我们提供参考。全球格局:销量背后的品牌影响力本田在摩托车领域的统治力..

    2025-10-14
  • 科技之最

    英特尔18A工艺首秀!Panther Lake深度揭秘:AI PC的全新答案

    位于美国亚利桑那州的凤凰城,坐落着英特尔最先进的晶圆厂,而在9月份的最后几天,雷科技有幸被英特尔邀请参加其年度技术盛会ITT(Intel Technology Tour),飞越太平洋来到这座美丽的沙漠绿洲城市,参观并了解英特尔最新的技术成果。图源:雷科技在参观英特尔工厂的间隙,英特尔高级首席工程师Arik Gihon、英特尔院士Carlos..

    2025-10-14
  • 尿液总是发黄,是自己的肾出现了问题吗?医生告诉你答案

    正常人每天都会排尿,但很多人不太关注尿液情况。殊不知,尿液的气味和颜色就是人的健康晴雨表,我们可以通过它的变化从而判断出身体健康与否。正常的尿液是怎样的?我们每天都要排尿,但是你知道尿液是怎么形成的吗?尿液并非简单喝进去的水经过吸收后产出的排泄物,尿液在肾脏内形成,当血液流经肾小球的时候,血液中的水..

    2025-10-12

微信分享

微信分享二维码

扫描二维码分享到微信或朋友圈

链接已复制
蜂鸟影院2048影视资源论坛熊猫影视河马影视星辰影视萝卜影院八哥电影网人人看电影无忧影视网橙子影视网叮当影视网天天影视网青青影视网电影天堂开心追剧网西瓜影院麻花影视网70影视网年钻网茶小舍电影藏影堂新神州影域煮酒观影体积影视爱看影院星光电影至尊影院极影公社超清视界