面试疑难点解析——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面试技巧

相关文章
|
17小时前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
33 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
5天前
|
安全 前端开发 Java
10:基于Servlet模拟用户登录功能的实现与解析-Java Web
10:基于Servlet模拟用户登录功能的实现与解析-Java Web
20 3
|
7天前
|
供应链 Java API
Java 8新特性解析及应用区块链技术在供应链管理中的应用与挑战
【4月更文挑战第30天】本文将深入探讨Java 8的新特性,包括Lambda表达式、Stream API和Optional类等。通过对这些新特性的详细解析和应用实例,帮助读者更好地理解和掌握Java 8的新技术。
|
7天前
|
Java 关系型数据库 测试技术
Java代码一键生成数据库文档(案例详解)
Screw是一个自动化数据库文档生成工具,能根据数据库表结构快速生成简洁、多格式(HTML、Word、Markdown)的文档,支持MySQL、MariaDB等多数据库。它使用Freemarker模板,允许用户自定义样式。依赖包括HikariCP数据库连接池和对应JDBC驱动。通过在Java代码或Maven插件中配置,可方便生成文档。示例代码展示了如何在测试用例中使用Screw。文档效果依赖于数据库中的表和字段注释。
|
7天前
|
安全 Java API
Java 8新特性深度解析
【4月更文挑战第30天】本文将深入探讨Java 8的新特性,包括Lambda表达式、Stream API、Optional类等,以及这些新特性如何改变我们编写Java代码的方式。
|
8天前
|
Java 索引
Java String应用与开发
Java String应用与开发
20 0
|
8天前
|
算法 Java
【Java探索之旅】运算符解析 算术运算符,关系运算符
【Java探索之旅】运算符解析 算术运算符,关系运算符
16 0
|
8天前
|
安全 Java 开发者
构建高效微服务架构:后端开发的新范式Java中的多线程并发编程实践
【4月更文挑战第29天】在数字化转型的浪潮中,微服务架构已成为软件开发的一大趋势。它通过解耦复杂系统、提升可伸缩性和促进敏捷开发来满足现代企业不断变化的业务需求。本文将深入探讨微服务的核心概念、设计原则以及如何利用最新的后端技术栈构建和部署高效的微服务架构。我们将分析微服务带来的挑战,包括服务治理、数据一致性和网络延迟问题,并讨论相应的解决方案。通过实际案例分析和最佳实践的分享,旨在为后端开发者提供一套实施微服务的全面指导。 【4月更文挑战第29天】在现代软件开发中,多线程技术是提高程序性能和响应能力的重要手段。本文通过介绍Java语言的多线程机制,探讨了如何有效地实现线程同步和通信,以及如
|
8天前
|
Java 关系型数据库 MySQL
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
|
8天前
|
存储 Java 大数据
JAVA:编程的艺术与实战解析
JAVA:编程的艺术与实战解析
18 2

推荐镜像

更多