面试中关于数据模型设计是一个很常见的问题,这个问题很宽泛、看起来很简单,但是想回答好并不容易。
这篇文章很短,我们就简单聊一下这个问题。
问题本身
模型设计本身是一个开放性的问题,什么意思呢?这个问题并没有100%对的标准答案。
当然各种社区有很多关于模型设计的方法论、规范性质的文章可以参考,但是这些理论不足以支持你拿到一个面试官满意的评价。
这个问题到底该怎么回答?
下面这个思路供大家参考。
先说核心基础内容
在做数仓建模、模型设计时,首先我们要表达出来整体的建设思路,这个建设思路必须包含下面这几个内容:
模型的分层 数据域的划分和业务过程 开发命名规范
可以在这些内容的基础上进行扩展,你可以把某个核心业务场景带入进来,告诉面试官你在真实场景中是如何做的。
例如你可以在某个场景中按照不同的模型设计方法做对比,然后告诉面试官你们最终的选择和原因。
有真实的业务场景帮你做背书,比「虚空」描述来的更加可信和有说服力。
再强调建设思路
建设思路这部分,我非常建议大家可以从模型设计的一些基本原则入手。分别在维度层、明细层、汇总层以及可能有的数据集市做描述,例如:
维度层
可以强调你们在维度层建设的时候的一些基本原则,例如不做跨域关联、不做基于业务过程的二次加工,核心原则是保障维度表的质量和时效等。
明细层
在明细层你可以表达,明细层是维度建模的核心。在明细层的设计中会包含业务过程、维度属性以及通用的业务逻辑封装,尽量多的冗余维度属性和事实字段,提升覆盖度和易用性。
汇总层
在汇总层可以表达重点关注,指标的计算口径统一、提升复用性,并且汇总层还会承担指标的标准化沉淀。核心原则是减少重复加工,沉淀某个业务粒度下的业务过程指标。
另外如果你们还有关于数据集市的建设,可以表达你们的考量是什么?例如易用性?可扩展性?冗余各种跨域关联计算的高度汇总指标?等等。
这些内容都是建设思路的表达,最好结合具体的真实的业务过程来跟面试官交流,并且在表达过程中要有自己的思考。这么做的优点是什么?缺点又是什么?
最后概括设计原则
可以总结一下模型设计的一些原则,例如可以从下面内容来表达:高内聚、低耦合,公共逻辑抽象,扩展性,成本考量等。
上面的内容最好结合实际的业务场景表达,并且可以针对性的在某个点进行展开,例如可以通过数据冗余降低数据的查询和更新成本等。
总之
这个问题是一个宽泛、无标准答案的问题。
如果你实在不知道如何下手,可以参考我上面的思路。或者结合自己掌握的关于建模的其他理论、实践新增或者减少。
「言之有物」 和 「思路清晰」 是回答好这个问题的关键。