① 什么叫“细粒度”
细粒度模型,通俗的讲就是将业务模型中的对象加以细分,从而得到更科学合理的对象模型,直观的说就是划分出很多对象。
粒度是数据库名词,计算机领域中粒度指系统内存扩展增量的最小值。粒度问题是设计数据仓库的一个最重要方面。粒度是指数据仓库的数据单位中保存数据的细化或综合程度的级别。细化程度越高,粒度级就越小;相反,细化程度越低,粒度级就越大。数据的粒度一直是一个设计问题。
在早期建立的操作型系统中,粒度是用于访问授权的。当详细的数据被更新时,几乎总是把它存放在最低粒度级上。但在数据仓库环境中,对粒度不作假设。
(1)数据库为什么用到表基本粒度扩展阅读
粒度运算是一种新兴的信息处理运算模型。它涉及到复杂信息实体(即信息粒,英语:Information Granule)的处理,包括数据的抽象化还有从信息推导知识的过程。一般来说,信息粒通常是数值层面上的实体集合,它们以相似性、功能的近似性、不可辨别性及一致性等指标来进行整合。
目前,粒度运算只有较多的理论观点而尚未形成一套完整的方法。从理论观点看,它提倡通过不同的分辨率或尺度,对数据中出现的知识进行认知以及探索。
在这个意义上来讲,粒度运算包含了所有能够在提取及表示知识或信息的尺度中,提供灵活性和适应性的所有方法。
② 为什么要给数据库分层
(1)为什么要分层
作为一名数据的规划者,我们肯定希望自己的数据能够有秩序地流转,数据的整个生命周期能够清晰明确被设计者和使用者感知到。直观来讲就是如图这般层次清晰、依赖关系直观。
但是,大多数情况下,我们完成的数据体系却是依赖复杂、层级混乱的。如下图,在不知不觉的情况下,我们可能会做出一套表依赖结构混乱,甚至出现循环依赖的数据体系。
因此,我们需要一套行之有效的数据组织和管理方法来让我们的数据体系更有序,这就是谈到的数据分层。数据分层并不能解决所有的数据问题,但是,数据分层却可以给我们带来如下的好处:
1)清晰数据结构: 每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解;
2)减少重复开发: 规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算;
3)统一数据口径: 通过数据分层,提供统一的数据出口,统一对外输出的数据口径;
4 )复杂问题简单化: 将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题。
为了满足前面提到好处,通常将数据模型分为三层:数据运营层( ODS )、数据仓库层(DW)和数据应用层(APP)。简单来讲,我们可以理解为:ODS层存放的是接入的原始数据,DW层是存放我们要重点设计的数据仓库中间层数据,APP是面向业务定制的应用数据。下面详细介绍这三层的设计。
(2)数据模型的分层
1)源数据层(ODS)
此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。
2)数据仓库层(DW)
也称为细节层,DW 层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。
此层可以细分为三层:
明细层DWD(Data Warehouse Detail) :存储明细数据,此数据是最细粒度的事实数据。该层一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联。
中间层DWM(Data WareHouse Middle) :存储中间数据,为数据统计需要创建的中间表数据,此数据一般是对多个维度的聚合数据,此层数据通常来源于DWD层的数据。
业务层DWS(Data WareHouse Service) :存储宽表数据,此层数据是针对某个业务领域的聚合数据,业务层的数据通常来源与此层,为什么叫宽表,主要是为了业务层的需要在这一层将业务相关的所有数据统一汇集起来进行存储,方便业务层获取。此层数据通常来源与DWD和DWM层的数据。
在实际计算中,如果直接从DWD或者ODS计算出宽表的统计指标,会存在计算量太大并且维度太少的问题,因此一般的做法是,在DWM层先计算出多个小的中间表,然后再拼接成一张DWS的宽表。由于宽和窄的界限不易界定,也可以去掉DWM这一层,只留DWS层,将所有的数据在放在DWS亦可。
3)数据应用层(DA 或 APP)
前端应用直接读取的数据源;根据报表、专题分析的需求而计算生成的数据。
4)维表层(Dimension)
最后补充一个维表层,维表层主要包含两部分数据:
A)高基数维度数据:一般是用户资料表、商品资料表类似的资料表。数据量可能是千万级或者上亿级别。
B)低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万。
(3)问题扩展
数据仓库系统架构
上图系统各部分的执行流程是:
1)确定分析所依赖的源数据。
2)通过ETL将源数据采集到数据仓库。
3)数据按照数据仓库提供的主题结构进行存储。
4)根据各部门的业务分析要求创建数据集市(数据仓库的子集)。
5)决策分析、报表等应用系统从数据仓库查询数据、分析数据。
6)用户通过应用系统查询分析结果、报表。
(4)结合项目中使用
电商网站的数据体系设计,这里针对用户访问日志这一部分数据进行举例说明:
在ODS层中,由于各端的开发团队不同或者各种其它问题,用户的访问日志被分成了好几张表上报到了我们的ODS层。
为了方便大家的使用,我们在DWD层做了一张用户访问行为天表,在这里,我们将PC网页、H5、小程序和原生APP访问日志汇聚到一张表里面,统一字段名,提升数据质量,这样就有了一张可供大家方便使用的明细表了。
在DWM层,我们会从DWD层中选取业务关注的核心维度来做聚合操作,比如只保留人、商品、设备和页面区域维度。类似的,我们这样做很多个DWM的中间表。
然后在DWS层,我们将一个人在整个网站中的行为数据放到一张表中,这就是我们的宽表了,有了这张表,就可以快速满足大部分的通用型业务需求了。
最后,在APP应用层,根据需求从DWS层的一张或者多张表取出数据拼接成一张应用表即可。
③ 在系统设计中,对数据库的设计应考虑哪些设计原则
数据库是整个软件应用的根基,是软件设计的起点,它起着决定性的质变作用,因此我们必须对数据库设计高度重视起来,培养设计良好数据库的习惯,是一个优秀的软件设计师所必须具备的基本素质条件!
那么我们要做到什么程度才是对的呢?下面就说说数据库设计的原则:
1、数据库设计最起码要占用整个项目开发的40%以上的时间
数据库是需求的直观反应和表现,因此设计时必须要切实符合用户的需求,要多次与用户沟通交流来细化需求,将需求中的要求和每一次的变化都要一一体现在数据库的设计当中。如果需求不明确,就要分析不确定的因素,设计表时就要事先预留出可变通的字段,正所谓“有备无患”。
2、数据库设计不仅仅停留于页面demo的表面
页面内容所需要的字段,在数据库设计中只是一部分,还有系统运转、模块交互、中转数据、表之间的联系等等所需要的字段,因此数据库设计绝对不是简单的基本数据存储,还有逻辑数据存储。
3、数据库设计完成后,项目80%的设计开发在你脑海中就已经完成了
每个字段的设计都是有他必要的意义的,你在设计每一个字段的同时,就应该已经想清楚程序中如何去运用这些字段,多张表的联系在程序中是如何体现的。换句话说,你完成数据库设计后,程序中所有的实现思路和实现方式在你的脑海中就已经考虑过了。如果达不到这种程度,那当进入编码阶段后,才发现要运用的技术或实现的方式数据库无法支持,这时再改动数据库就会很麻烦,会造成一系列不可预测的问题。
4、数据库设计时就要考虑到效率和优化问题
一开始就要分析哪些表会存储较多的数据量,对于数据量较大的表的设计往往是粗粒度的,也会冗余一些必要的字段,已达到尽量用最少的表、最弱的表关系去存储海量的数据。并且在设计表时,一般都会对主键建立聚集索引,含有大数据量的表更是要建立索引以提供查询性能。对于含有计算、数据交互、统计这类需求时,还要考虑是否有必要采用存储过程。
5、添加必要的(冗余)字段
像“创建时间”、“修改时间”、“备注”、“操作用户IP”和一些用于其他需求(如统计)的字段等,在每张表中必须都要有,不是说只有系统中用到的数据才会存到数据库中,一些冗余字段是为了便于日后维护、分析、拓展而添加的,这点是非常重要的,比如黑客攻击,篡改了数据,我们便就可以根据修改时间和操作用户IP来查找定位。
6、设计合理的表关联
若多张表之间的关系复杂,建议采用第三张映射表来关联维护两张表之间的关系,以降低表之间的直接耦合度。若多张表涉及到大数据量的问题,表结构尽量简单,关联也要尽可能避免。
7、设计表时不加主外键等约束性关联,系统编码阶段完成后再添加约束性关联
这样做的目的是有利于团队并行开发,减少编码时所遇到的问题,表之间的关系靠程序来控制。编码完成后再加关联并进行测试。不过也有一些公司的做法是干脆就不加表关联。
8、选择合适的主键生成策略
④ 什么叫基本表什么是视图二者的区别和联系是什么
基本表是数据库中用来存储数据的对象,是有结构的数据的集合,是整个数据库系统的基础。数据在表中式按行和列的格式组织排列的。
视图是计算机数据库中的一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。
基本表、视图区别为:存在不同、存储内容不同、操作不同。视图是由一个或几个基本表导出形成的虚表。
一、存在不同
1、基本表:基本表是本身独立存在的表。
2、视图:视图本身不存在独立存储在数据库中,是一个虚表。
二、存储内容不同
1、基本表:基本表存储的内容是实际的数据。
2、视图:视图存储的内容只有存储定义,不存放实际数据。
三、操作不同
1、基本表:操作者可以对基本表进行增删改查四种操作。
2、视图:操作者只可以对视图进行查操作,不能进行增删改操作。
参考资料来源:
网络——表
网络——视图