面试疑难点解析——Java数据库开发(三)

简介: 本文从两个面试真题着手分析,为大家解答数据库设计的相关问题。

7月9日 19:00-21:30 阿里云开发者社区首场“Offer 5000”直播开启!14位团队技术大牛在线招人,更有《阿里云技术面试红宝书》助你拿下Offer!点击下图或链接马上投递简历
图片无法显
点击图片或戳我查看详情和投简历


1.一张基础表dept,100张单据表用到了dept中的deptno,对于100张单据表都去设置外键参照dept表,对于中小型系统来讲,在数据库中表结构设置这种关联关系,对开发有益;

如果数据量不大,所有正确的设计思路都是可以正常发挥的。所有可以使用的查询,所有可以不进行费劲的操作(操作想怎么简化就怎么简化)。例如:最坑的设计:“编程语言+存储过程”。

2.对大型系统ERP系统(比如用友、金蝶),每张表引入这种关联关系,实在是太恐怖了,如果在更新的时候,在前台和业务层校验它deptno代号的合法性之后,存入表中,这样是不是会更好?

image.png
(1)系统1示例图

image.png
(2)系统2示例图

如上图所示,这两种方法在数据量小的情况下都是可以解决问题的。可能有人会问,这两种方法的区别是什么?

最大的区别在于系统的可控性上。
假如以一个商城为例:

初期发现,每天只有三个订单量,这个时候的数据吞吐量不大,怎么设计都可以(使用以上两种方法都可以,此时没有区别);

后来随着推广力度加强,突然有一天订单量爆满,假设有1000W单,此时如果使用“系统2”过程操作实现,那么系统一定会蹦,整个设计无法继续进行下去。

也就是说单数据库的开发只能够提供一种基础的锻炼,相当于开发经历的第一层。随后需要考虑到数据表的性能,以及系统的拆分问题。

如果要进行数据表的拆分,那么这些关联关系无效,事务处理也将面临很大挑战,而这种拆库拆表的操作就称为库表分离。

库表分离有两种拆分模式:水平拆分、垂直拆分(垂直水平拆分)。

水平拆分示例:假如订单表的数据量很大,将这些订单表拆分为十个数据库的表,每个数据库的表只保存10%的数据;

垂直拆分示例:将数据表由一张表拆分为多张表,比如说商品表,有商品名称、单价等基础信息和其他相关属性信息,这些可以放在两个数据库里,用户从A数据库读基础信息,从B数据库读完整属性;

垂直水平拆分示例:用商城系统来说,将其拆分成“用户数据库”、“订单数据库”和“库存数据库”,从“订单数据库”里又水平拆分10个数据库。

这个时候看起来这些问题都可以得到解决,但同时也需要知道另外一个问题:如果将系统分库(将系统拆分为若干个子系统的过程),那么拆分后的子系统之间的沟通以及控制问题也就出现了。

有人会问,拆分到很多数据库,查找的时候不方便怎么办呢?其实可以再引入一个给数据查的数据库,如果做到这里就表明要接触到一些系统架构问题了,这些过程一定是干了几年之后才能得到的结论。

如何做一个厉害的架构?拿下月薪两三万的职位需要哪些技术水平?
更多分享,请大家继续关注后续的面试疑难点解析~

更多专业知识,面试技巧就在面试一点通,持续更新中……
感谢浏览~
本内容来源于阿里云大学-Java面试技巧

相关文章
|
11月前
|
存储 缓存 NoSQL
Redis常见面试题全解析
Redis面试高频考点全解析:从过期删除、内存淘汰策略,到缓存雪崩、击穿、穿透及BigKey问题,深入原理与实战解决方案,助你轻松应对技术挑战,提升系统性能与稳定性。(238字)
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
2338 0
|
12月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
674 100
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
11月前
|
监控 Java 关系型数据库
面试性能测试总被刷?学员真实遇到的高频问题全解析!
面试常被性能测试题难住?其实考的不是工具,而是分析思维。从脚本编写到瓶颈定位,企业更看重系统理解与实战能力。本文拆解高频面试题,揭示背后考察逻辑,并通过真实项目训练,帮你构建性能测试完整知识体系,实现从“会操作”到“能解决问题”的跨越。
|
11月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
12月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1676 1
|
11月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。

推荐镜像

更多
  • DNS