发布网友 发布时间:2022-04-19 09:58
共6个回答
懂视网 时间:2022-05-14 05:03
正文开始:
时光荏苒,本课已经出了近半年,到今天(2016-6-16)为止,一共有1374名观众,非常感谢大家能有耐心听我的课。从本周开始,重新进入正常的轨道,这一课是本周发的第二课。
课程地址:http://www.hellobi.com/course/54
此外,希望大家听完课以后去https://www.surveymonkey.com/r/CYQLCTD 填写一下调查问卷,我也好有的放矢,对于我教的不好的地方做调整和改善。
大家好, 这节课我们接着上节课的内容继续, 讲一下在数据库设计中对于NULL的处理.
由于本系列课程的核心内容还是讲数据仓库, 那么我这边讲的大部分内容还是基于数据仓库中的一些设计技巧. 这一部分也将在后面的课程里被大量的引用。
这里我再强调一次,设计本身其实并没有放之四海皆准的金科玉律,而本人才疏学浅,也只是尽可能的按照自己的经验去讲解我曾经学习以及实践过的设计,给大家作为一个参考。大家在实际的设计过程中,还是要具体问题具体分析,切记不要生搬硬套。
首先,一般来说对于一个数据库的设计,对NULL值处理的是有统一的原则的,也就是我们常说的一致性,consistent。对于类似的场景,尽可能采用相同的设计模式来设计。举一个例子,对于NULL的处理,我们经常会采用默认值的方式,比如我们设计一个时间字段,表示项目实际结束时间,而创建这条记录的时间通常是项目刚刚开始,这个字段的内容当时我们是不知道的,因此我们可以默认的把该时间字段设置成9999-12-31,当最后项目结束的时候,再把这个值UPDATE项目结束的真实时间。这样为了保证整个数据库设计的一致性呢,当在同一个库里, 遇到类似的场景时,都是取同样的默认值,也就是说不能在这个字段你用9999-12-31,另一个类似的你用2099-12-31. 这样做的好处是使程序开发者以及其他数据库的使用人员更容易理解整个数据库的结构以及数据,并且也能保证所开发程序的一致性。
题外话,设计的一致性不仅仅体现在一个数据库上,其实整个企业也应该有相应的一致性设计规约,这也是信息标准化的重要课题。
第二,在建模过程中,对NULL的处理方式。有两种模式,如果对表的数据质量没有特别的要求,通常来说,都是对于主键以及一些重要的字段设成不可为空,其他都采用可为空的模式。如果对数据质量要求比较高,则采用相反的模式,默认所有的字段都不可为空,只针对有NULL需求的个别字段设置成可以为空。
上一节课我们介绍了一堆例子,那些容易出现SQL程序错误的坑。那我们设计的时候,为了减少编程错误的隐患. 让我们回顾一下,都有哪些隐患。一共有五种特点比较突出的隐患。
下面的这个场景就很简单了,这里是三张表,一张PROD MASTER表,还有下面这个新加的产品销售经理表,但因为产品表和销售经理表是多对多的关系,因此建一个XREF表,这张表主要用于表之间的JOIN。这张表是PROD_CD以及MANAGER_ID从逻辑上来讲是作为联合主键的,因此显然不可为空。因为在数据仓库设计中,有很多人不喜欢给这种表建主键,因此我这里单独说明一下。
下一个场景,事务表。这张表很简单,就是销售经理在某月的销售情况与销售计划的对比表。
首先我们看表中的字段,前三个是联合主键,因此显然必须不可为空。然后看PLAN_SALE_AMT, ACTUAL_SALE_AMT以及Quantity。我们按照步骤来,首先看需求,需求就是每个产品的销售经理会有销售配额,也就是PLAN_SALE_AMT,然后还有一个实际的销售情况,就是ACTUAL_SALE_AMT。很显然,需要经常去求完成比以及计划与实际的差额,因此这几个字段就需要经常做数学计算。然后还有这种需求,就是求每个经理的平均每个月的销售配额以及实际销售情况,也就是说还会用到聚合函数。这里我说的需求是非常重要的,就是还有一些特殊的场景我们要考虑到,就是有可能某个经理,其中某个产品他没有配额,但他也销售出去了,这样这个经理会有实际销售额,但没有对应的配额。这个时候呢,如果遵从数据的本质,那么就给PLAN_SALE_AMT置为NULL。也就是按照表PROD_SALES_PERFORMANCE2来设计,但如果担心NULL带来的数据计算的隐患,也就是说计划为NULL减去实际,而实际销售额是有值的,出现NULL的现象。也可以设计成右边的表的模式PROD_SALES_PERFORMANCE,这些项目均不可为空,然后增加一个PLAN_ASSIGN_IND用于标识,是不是这个经理有配额。但无论这两种那种情况,都需要告诉开发者,编程时需要注意的地方。这也是我前面提到的设计一致性的重要性,你有一个地方这么设计的,给开发者讲明白了,后面类似的设计他们就很容易理解了。
那么,有关NULL值的相关设计呢,我们就先讲到这,这个话题很大,应该还有很多场景没有覆盖到,并且星型表的NULL值设定我也没有讲。未来在讲维度建模的时候,还会提到。下节课我会讲第三范式的概念,我看了一下天善的课程,其实有人已经讲过了,不过实在对不起,我希望我的课程能够比较完整,因此还是会把这部分按我自己的理解重新讲一遍。谢谢大家!
延伸阅读:
高质量数据库建模系列课程<10> PPT & 讲义 -- NULL之别传
高质量数据库建模系列课程
标签:enc 存在 访问 销售额 关系 不用 http 编程错误 特殊
热心网友 时间:2022-05-14 02:11
数据建模是一个用于定义和分析在组织的信息系统范围内支持商业流程所需的数据要求的过程。简单来说,数据建模是基于对业务数据的理解和数据分析的需要,将各类数据进行整合和关联,使得数据可以最终以可视化的方式呈现,让使用者能够快速地、高效地获取到数据中有价值的信息,从而做出准确有效的决策。
之所以数据建模会变得复杂且难度大,是因为在建模过程中会引入数学公式或模型,用于确定数据实体之间的关联关系。不同的业务逻辑和商业需求需要选择不同的数学公式或模型,而且,一个好的数据模型需要通过多次的测试和优化迭代来完成,这就使得数据建模的难度变得很高。但是,数据分析中的建模并没有想象中的那么高深莫测,人人都可以做出适合自己的模型。
数据建模总归是为了分析数据从而解决商业问题。如下图数据建模的流程图,数据建模核心部分是变量处理和模型搭建。
变量处理
在建模之前,首先要决定选择哪些变量进行建模,主要从业务逻辑和数据逻辑两方面来考虑。业务逻辑需要了解数据来源的背景,通过了解业务知识来判断哪些变量在业务上很有价值的,哪些变量是可以选择的。数据逻辑则是从数据的完整性,集中度,是否与其他变量强相关等角度来考虑。
除了选择变量,对于一些变量的重构也是需要在建模前进行。例如客户的满意度有“满意”“不满意”,可以将其重构成数字“0”和“1”,便于后续建模使用。除此以外,还有将变量单独计算(取平均值)和组合计算(如A*B)也是常用的重构方法,例如,缺失值以数据取平均值的方式替换。
模型搭建
在模型搭建时,会经历选择算法、设定参数、加载算法、测试结果四个过程。在这个过程中,测试结果会引导调整之前设定的参数,加载算法会对应调整之前选择的算法,而选择算法时会考虑到已定的变量,如果变量不满足算法要求,还需回到选择/重构变量,直至得到最合适的模型。
在优化模型的过程中,模型的解释能力和实用性会不断地提升。在结果输出之后,还需接收业务人员的反馈,看看模型是否解决了他们的问题,如果没有,还需进一步修改和调整。
MicroStrategy在数据领域深挖企业需求,经过多年的研究和沉淀,结合众多复杂的应用场景,不断更新体验,深入开发各种数据辅助功能,使客户可以一站式链接各类型数据资源,完成数据导入和数据建模。在MicroStrategy 平台中,既支持传统方式数据建模,即通过Project Schema 来进行建模,又支持自助式数据导入的建模方式。
热心网友 时间:2022-05-14 03:29
数据模型(Data Model)是;
数据特征的抽象,是数据库管理的教学形式框架。数据库系统中用以提供信息表示和操作手段的形式构架。数据模型包括数据库数据的结构部分、数据库数据的操作部分和数据库数据的约束条件。
1)数据结构:数据模型中的数据结构主要描述数据的类型、内容、性质以及数据间的联系等。数据结构是数据模型的基础,数据操作和约束都建立在数据结构上。不同的数据结构具有不同的操作和约束。
2)数据操作:数据模型中数据操作主要描述在相应的数据结构上的操作类型和操作方式。 3)数据约束:数据模型中的数据约束主要描述数据结构内数据间的语法、词义联系、他们之间的制约和依存关系,以及数据动态变化的规则,以保证数据的正确、有效和相容。
优点: 存取方便且速度快 结构清晰,容易理解 数据修改和数据库扩展容易实现 检索关键属性十分方便 缺陷: 结构呆板,缺乏灵活性 同一属性数据要存储多次,数据冗余大(如公共边) 不适合于拓扑空间数据的组织 网状模型用连接指令或指针来确定数据间的显式连接关系,是具有多对多类型的数据组织方式 优点: 能明确而方便地表示数据间的复杂关系 数据冗余小 缺陷: 网状结构的复杂,增加了用户查询和定位的困难。 需要存储数据间联系的指针,使得数据量增大 数据的修改不方便(指针必须修改) 关系数据库模型是以记录组或数据表的形式组织数据,以便于利用各种地理实体与属性之间的关系进行存储和变换,不分层也无指针,是建立空间数据和属性数据之间关系的一种非常有效的数据组织方法 优点: 结构特别灵活,满足所有布尔逻辑运算和数*算规则形成的查询要求 能搜索、组合和比较不同类型的数据 增加和删除数据非常方便 缺陷: 数据库大时,查找满足特定关系的数据费时 对空间关系无法满足
热心网友 时间:2022-05-14 05:04
数据建模是一个用于定义和分析在组织的信息系统范围内支持商业流程所需的数据要求的过程。简单来说,数据建模是基于对业务数据的理解和数据分析的需要,将各类数据进行整合和关联,使得数据可以最终以可视化的方式呈现,让使用者能够快速地、高效地获取到数据中有价值的信息,从而做出准确有效的决策。
之所以数据建模会变得复杂且难度大,是因为在建模过程中会引入数学公式或模型,用于确定数据实体之间的关联关系。不同的业务逻辑和商业需求需要选择不同的数学公式或模型,而且,一个好的数据模型需要通过多次的测试和优化迭代来完成,这就使得数据建模的难度变得很高。但是,数据分析中的建模并没有想象中的那么高深莫测,人人都可以做出适合自己的模型。数据建模总归是为了分析数据从而解决商业问题。
更多数据建模信息,推荐咨询CDA相关课程。“CDA 数据分析师认证”是一套科学化,专业化,国际化的人才考核标准,课程培养学员硬性的数据挖掘理论与Python数据挖掘算法技能的同时,还兼顾培养学员软性数据治理思维、商业策略优化思维、挖掘经营思维、算法思维、预测分析思维,全方位提升学员的数据洞察力。点击预约免费试听课。
热心网友 时间:2022-05-14 06:55
据我所知数据建模有两个方向。第一种是数据调用、管理及观测,例如SQL数据库语言等,通俗的说就是建立算法模型来收集数据,不少人也称之为数据挖掘。例如企业内构建了客户的信息存储库,那么就需要编写代码来方便这些信息的调出和查阅。
第二种就是基于概率论,建立统计学模型或计量经济学模型来分析数据,例如验证新药是有效,广告投放是否有效,商品质量的提升是否会提高消费忠诚度等。涉及的软件有SAS,SPSS,R等。
热心网友 时间:2022-05-14 09:03
数据建模指的是对现实世界各类数据的抽象组织,确定数据库需管辖的范围、数据的组织形式等直至转化成现实的数据库。
将经过系统分析后抽象出来的概念模型转化为物理模型后,在visio或erwin等工具建立数据库实体以及各实体之间关系的过程·(实体一般是表)。
http://ke.baidu.com/view/1452242.htm