当前位置:首页 » 数据仓库 » 数据库建模实战
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数据库建模实战

发布时间: 2022-06-24 13:35:26

数据库建模的介绍

在设计数据库时,对现实世界进行分析、抽象、并从中找出内在联系,进而确定数据库的结构,这一过程就称为数据库建模。它主要包括两部分内容:确定最基本的数据结构;对约束建模。

❷ Python3数据分析与挖掘建模实战

❸ 数据建模的如何进行

概念建模
数据建模大致分为三个阶段,概念建模阶段,逻辑建模阶段和物理建模阶段。其中概念建模和逻辑建模阶段与数据库厂商毫无关系,换言之,与MySQL,SQL Server,Oracle没有关系。物理建模阶段和数据库厂商存在很大的联系,因为不同厂商对同一功能的支持方式不同,如高可用性,读写分离,甚至是索引,分区等。
概念建模阶段
实际工作中,在概念建模阶段,主要做三件事:
1. 客户交流
2. 理解需求
3. 形成实体
这也是一个迭代,如果先有需求,尽量去理解需求,明白当前项目或者软件需要完成什么,不明白或者不确定的地方和客户及时交流,和客户double confirm过的需求,落实到实体(Package);但是好多时候我们需要通过先和客户交流,进而将交流结果落实到需求,之后进一步具体到实体;本文可能会涉及到一些来自于EA(Enterprise Architect 7.1)建模术语,(EA中将每个实体视为一个Package)。这里并不对各种建模工具进行比较,如Visio,EA,PowerDesigner, ERWin等;其实作为员工的我们选择性很少,公司有哪个产品的Licence,我们就用哪个吧。
举例说明:在一个B2C电子商务网站中,这样的需求再普通不过了:客户可以在该网站上自由进行购物!我们就以这个简单例子,对其进行细分,来讲解整个数据建模的过程,通过上面这句话,我们可以得出三个实体:客户,网站,商品;就像Scrum(敏捷开发框架的一种)中倡导的一样每个Sprint,都要产出确确实实的东西,OK,概念建模阶段,我们就要产出实体。客户和商品(我们将网站这个实体扔掉,不需要它。)
在创建这两个实体(Package)的时候,我们记得要讲对需求的理解,以及业务规则,作为Notes添加到Package中,这些信息将来会成为数据字典中非常重要的一部分,也就是所谓的元数据。BTW,EA或者其他建模工具应该都可以自动生成数据字典,只不过最终生成的格式可能不太一样。如在Customer这个Package的Notes上,我们可以这样写,用户都要通过填写个人基本信息以及一个邮箱来注册账户,之后使用这个邮箱作为登录帐号登录系统进行交易。
在概念建模阶段,我们只需要关注实体即可,不用关注任何实现细节。很多人都希望在这个阶段把具体表结构,索引,约束,甚至是存储过程都想好,没必要!!因为这些东西使我们在物理建模阶段需要考虑的东西,这个时候考虑还为时尚早。可能有的人在这个阶段担心会不会丢掉或者漏掉一些实体?也不用担心,2013年好多公司都在采用Scrum的开发模式,只要你当前抽象出来的实体满足当前的User Story,或者当前的User Story里面的实体,你都抽象出来了,就可以了!如果你再说,我们User Story太大,实体太多,不容易抽象,那就真没办法了,建议你们的团队重新开Sprint 计划会议。
逻辑建模
逻辑建模阶段
对实体进行细化,细化成具体的表,同时丰富表结构。这个阶段的产物是,可以在数据库中生成的具体表及其他数据库对象(包括,主键,外键,属性列,索引,约束甚至是视图以及存储过程)。我在实际项目中,除了主外键之外,其他的数据库对象我都实在物理建模阶段建立,因为其他数据库对象更贴近于开发,需要结合开发一起进行。如约束,我们可以在web page上做JavaScript约束,也可以在业务逻辑层做,也可以在数据库中做,在哪里做,要结合实际需求,性能以及安全性而定。
针对Customer这个实体以及我们对需求的理解,我们可以得出以下几个表的结构,用户基本信息表(User),登录账户表(Account),评论表(Commnets,用户可能会对产品进行评价),当然这个案例中我们还会有更多的表,如用户需要自己上传头像(图片),我们要有Picture表。
针对产品实体,我们需要构建产品基本信息表(Proct),通常情况下,我们产品会有自己的产品大类(ProctCategory)甚至产品小类(ProctSubCategory),某些产品会因为节假日等原因进行打折,因为为了得到更好的Performance我们会创建相应ProctDiscount表,一个产品会有多张图片,因此产品图片表(ProctPicture)以及产品图片关系表(ProctPictureRelationship),(当然我们也可以只设计一张Picture表,用来存放所有图片,用户,产品以及其他)有人说产品和图片是一对多的关系,不需要创建一个关系表啊?是的,我认为只要不是一对一的关系,我都希望创建一个关系表来关联两个实体。这样带来的好处,一是可读性更好,实现了实体和表一一对应的关系,二是易于维护,我们只需要维护一个关系表即可,只有两列(ProctID和PictureID),而不是去维护一个Picture表。
客户进行交易,即要和商品发生关系,我们需要Transaction表,一个客户会买一个或者多个商品,因为一笔Transaction会涉及一个或多个Procts,因此一个Transaction和ProctDiscount之间的关系(ProctDiscount和Proct是一一对应的关系)需要创建,我们称其为Item表,里面保存TransactionID以及这笔涉及到的ProctDiscountID(s),这里插一句,好多系统都需要有审计功能,如某个产品历年来的打折情况以及与之对应的销售情况,我们这里暂不考虑审计方面的东西。
就这样,我们根据需求我们确定下来具体需要哪些表,进一步丰富每一个表属性(Column),当然这里面会涉及主键的选取,或者是使用代理键(Surrogate Key),外键的关联,约束的设置等细节,这里笔者认为只要能把每个实体属性(Column)落实下来就是很不错了,因为随着项目的开展,很多表的Column都会有相应的改动。至于其他细节,不同数据库厂商,具体实现细节不尽相同。关于主键的选取多说一句,有的人喜欢所有的表都用自增长ID作为主键,而有的人希望找到唯一能标识当前记录的一个属性或者多个属性作为主键;自增长ID作为代理主键,对于将来以多个类似当前Transaction System作为数据源,构建数据仓库的时候,这些自增长ID主键会是一个麻烦(多个系统中,相同表存在大量主键重复);使用一个属性或多个属性作为作为主键,不管主键是可编辑的,读写效率是我们必须考虑得。所以并没有一个放之四海而皆准的原则,笔者只是给大家推荐一些考虑的因素。
物理建模
物理建模阶段
EA可以将在逻辑建模阶段创建的各种数据库对象生成为相应的SQL代码,运行来创建相应具体数据库对象(大多数建模工具都可以自动生成DDL SQL代码)。但是这个阶段我们不仅仅创建数据库对象,针对业务需求,我们也可能做如数据拆分(水平或垂直拆分),如B2B网站,我们可以将商家和一般用户放在同一张表中,但是针对PERFORMANCE考虑,我们可以将其分为两张表;随业务量的上升,Transaction表越来越大,整个系统越来越慢,这个时候我们可以考虑数据拆分,甚至是读写分离(即实现MASTER-SLAVE模式,MYSQL/SQLSERVER可以使用Replication,当然不同存储引擎采用不同的方案),这个阶段也会涉及到集群的事情,如果你是架构师或者数据建模师,这个时候你可以跟DBA说,Alright,I am done with it,now is your show time.
相信大家都知道范式,更有好多人把3NF奉为经典,3NF确实很好,但是3NF是几十年前提出来的,那个时候的数据量以及访问频率和2012年完全不是一个数量级的;因此我们绝对不能一味地遵守3NF;在整个数据建模过程中,在保证数据结构清晰的前提下,尽量提高性能才是我们关注的要点,因此笔者大力倡导数据适当冗余!
上面笔者是结合一些实际例子表达自己对数据建模的观点,希望对读着有用。在数据建模过程中,不要希望一步到位将数据库设计完整,笔者不管是针对data warehouse还是Transactional Database设计,从来没有过一次成功的经历。随着项目的进行,客户和开发团队对业务知识与日增长,因此原来的设计也在不断完善中。毕竟,数据建模或者设计数据库不是我们的最终目的,我们需要的是一个健壮,性能优越,易扩展,易使用的软件!

❹ 如何进行数据建模

如何进行数据建模
正确完成建模

在过去的几十年里,数据建模的努力通常集中在关系数据建模或可扩展标记语言(XML)的建模上。只要数据存储在关系数据库中,关系数据建模就会很好,但除此之外,它很少会有其他的用途。而且XML也不能被可靠地称为建模语言。XML是序列化数据的规范--即定义了如何将数据写入文件。XML为构造数据的序列化提供了一种格式,但它不是一个真正的模型。

我所说的“模型”指的是以数学为基础的形式规范。实际上,这意味着是可以使用形式化方法进行验证的东西。通俗地说,这意味着我们可以用数学运算来证明它是正确的,并且我们可以使验证过程自动化。而在XML模式中捕获数据不符合此定义下的模型。但可以肯定的是,我们可以使用软件来验证该XML格式是否良好,是否符合一些XML模式的文档。但这还不足以真正地对数据进行建模。

无论是计算机还是人,如果不同时理解数据的语法(结构)和语义(含义),就无法理解数据。XML可以捕获语法,但它不能天生捕获语义。语义可以用XML格式编写,但是这些语义必须首先在一些更正式的建模方案中被捕获。换句话说,企业需要一个正式的本体。这种建模方案大多基于形式逻辑,通常是公共逻辑或描述逻辑。

迄今为止,最常用的语义建模语言是基于描述逻辑的网络本体语言(OWL)。这意味着我们不仅可以正式验证模型及其包含的数据,还可以通过对数据的推理来推断新的事实,并且我们可以证明这些推断的正确性。因为OWL是本体建模的事实上的标准,所以我将把剩下的内容限制在OWL上。

但是等等!所有这些都不意味着你需要将你的数据存储为OWL。在你过于担心如何将存储格式强加给不情愿的开发人员之前,先听我说完。

❺ 什么是数据库建模,为什么要数据库建模,有什么好处

你说的答案不对,我们经理说数据库建模是指把实际业务逻辑抽离出来,从而变成与数据库表对应的表结构!所以不能给你分,我自己拿回来了。

❻ 数据库建模是做些什么能举便说明下方法和步聚吗

数据库分为模式、外模式和内模式三级
一般建模指概念模型(如E-R图方式建立)
逻辑模型(一般指存储表设计、关系模型的建立)
物理模型(一般指存储设计、索引等。)

❼ 数据仓库数据建模的几种思路

数据仓库数据建模的几种思路主要分为一下几种

1. 星型模式

星形模式(Star Schema)是最常用的维度建模方式。星型模式是以事实表为中心,所有的维度表直接连接在事实表上,像星星一样。星形模式的维度建模由一个事实表和一组维表成,且具有以下特点:a. 维表只和事实表关联,维表之间没有关联;b. 每个维表主键为单列,且该主键放置在事实表中,作为两边连接的外键;c. 以事实表为核心,维表围绕核心呈星形分布;

星座模型

❽ 数据分析建模步骤有哪些

1、分类和聚类


分类算法是极其常用的数据挖掘方法之一,其核心思想是找出目标数据项的共同特征,并按照分类规则将数据项划分为不同的类别。聚类算法则是把一组数据按照相似性和差异性分为若干类别,使得同一类别数据间的相似性尽可能大,不同类别数据的相似性尽可能小。分类和聚类的目的都是将数据项进行归类,但二者具有显着的区别。分类是有监督的学习,即这些类别是已知的,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类。而聚类则是无监督的学习,不需要对数据进行训练和学习。常见的分类算法有决策树分类算法、贝叶斯分类算法等;聚类算法则包括系统聚类,K-means均值聚类等。


2、回归分析


回归分析是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,其主要研究的问题包括数据序列的趋势特征、数据序列的预测以及数据间的相关关系等。按照模型自变量的多少,回归算法可以分为一元回归分析和多元回归分析;按照自变量和因变量间的关系,又可分为线性回归和非线性回归分析。


3、神经网络


神经网络算法是在现代神经生物学研究的基础上发展起来的一种模拟人脑信息处理机制的网络系统,不但具备一般计算能力,还具有处理知识的思维、学习和记忆能力。它是一种基于导师的学习算法,可以模拟复杂系统的输入和输出,同时具有非常强的非线性映射能力。基于神经网络的挖掘过程由数据准备、规则提取、规则应用和预测评估四个阶段组成,在数据挖掘中,经常利用神经网络算法进行预测工作。


4、关联分析


关联分析是在交易数据、关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的关联、相关性或因果结构,即描述数据库中不同数据项之间所存在关系的规则。例如,一项数据发生变化,另一项也跟随发生变化,则这两个数据项之间可能存在某种关联。关联分析是一个很有用的数据挖掘模型,能够帮助企业输出很多有用的产品组合推荐、优惠促销组合,能够找到的潜在客户,真正的把数据挖掘落到实处。4市场营销大数据挖掘在精准营销领域的应用可分为两大类,包括离线应用和在线应用。其中,离线应用主要是基于客户画像进行数据挖掘,进行不同目的针对性营销活动,包括潜在客户挖掘、流失客户挽留、制定精细化营销媒介等。而在线应用则是基于实时数据挖掘结果,进行精准化的广告推送和市场营销,具体包括DMP,DSP和程序化购买等应用。

❾ 数据库建模的过程和应该注意事项

数据库各级模式的形成过程 1.需求分析阶段:综合各个用户的应用需求 2.概念设计阶段:形成独立于机器特点,独立于各个DBMS产品的概念模式(E-R图) 3.逻辑设计阶段:首先将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式;然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图(View),形成数据的外模式 4.物理设计阶段:根据DBMS特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式 。 数据库设计技巧 1. 设计数据库之前(需求分析阶段) 1) 理解客户需求,询问用户如何看待未来需求变化。让客户解释其需求,而且随着开发的继续,还要经常询问客户保证其需求仍然在开发的目的之中。 2) 了解企业业务可以在以后的开发阶段节约大量的时间。 3) 重视输入输出。 在定义数据库表和字段需求(输入)时,首先应检查现有的或者已经设计出的报表、查询和视图(输出)以决定为了支持这些输出哪些是必要的表和字段。

❿ 谁能告诉我SQL数据库如何建模

先建概念模型,可用ER或者EER表达,
再建立逻辑模型,是ER或者EER的衍生,(概念模型和逻辑模型有时可以一步到位)
最后再用软件转为物理模型,然后数据库就自动生成了。