datawarehouse

datawarehouse 

Sunday, May 07, 2006

 

RE:RE:how's the scope for fresher in dwh
Posted by shivaprasadmb on 4/28/2006 4:28:00 AM
Hi Kumar,
You are right.
what I believe is that modelling is an art than a
science which comes from experience.
The other aspects like ETTL can be looked upon by
freshers.
One can look DW from different angles like
Presentation,modelling and ETTL.
What I had mentioned was Presentation and ETTL are the
ones that freshers can look into in DW.
I am not discouraging the freshers here.
If they can equip themselves with some real time
experience then it makes more sense to them as to a
fresher.

--- akumar via dw-career
wrote:

> Dear SHriram,
>
> i guess Shiva means, that a fresher to get a hold in
> DW, would take some time.
>
> coz the propective at a Macro level comes after a
> person gets some exp.
>
> when you implement DW its not a product
> implementation but a philosophy to run businesses.
>
>
> kumar
>
>
>
>
>
>
>
>
>
> ---------------Original Message---------------
> >Shiva,
> >Can you tell me what software maturity do freshers lack?
> >Because I was myself a fresher when I joined DW.
> >Regards,
> >Sriram
> >
> >
> >> -----Original Message-----
> >> From: shivaprasadmb via dw-career [SMTP:]
> >> Sent: Thursday, April 27, 2006 2:01 PM
> >> To: sriram_ramani
> >> Subject: [SPAM] - RE:[dw-career] how's the scope for fresher in dwh -
> >> Found word(s) software in the Text body
> >>
> >> Hi there,
> >> There is a lot of scope for DW. One needs to have software maturity to
> >> excel in any BW.
> >> I do not believe that freshers will have that initially.
> >> First, One needs to digest the concepts of OLTP system and affairs.
> >> Again there are different layers in DW that one can get into.
> >> As fresher one can get in and learn using the preentation layer and basic
> >> extraction process.
> >> I hope that this answers your query.
> >> Just do not go by the demands in the market, you need to assess yourself
> >> and your interestd in DW.
> >> All the best.
> >> ---------------Original Message---------------
> >> >Hello,
> >> > I will complete my MSc(Comp. Sci.) in june. Now i am doing Industrial Training where i am working on Java.
> >> > I am planning to do a course in dwh which is of 2 months. i would like to know, how is the scope for dwh as a fresher?
> >> > Anybody knows institute for dwh in pune???
> >> >
> >> >Kindly waiting for your valuable reply.
> >> >
> >> >Regards,
> >> >Jeevan
> >> >
> >> >
> >> >
> >> >
> >>
> >>
> >>
> >> ____________________________________________ Confidential: This electronic message and all contents contain information from Syntel, Inc. which may be privileged, confidential or otherwise protected from disclosure. The information is intended to be for the addressee only. If you are not the addressee, any disclosure, copy, distribution or use of the contents of this message is prohibited. If you have received this electronic message in error, please notify the sender immediately and destroy the original message and all copies.
> >
>
>
>
>
>

Best Regards
Shiva Prasad M B

Saturday, May 06, 2006

 

我是(519216) 21:51:14
www.ieta.com.cn
大米饭(722986) 00:18:51
这一段时间上了一些data warehouse的课,有了些感想,但也产生了一些迷惘.首先感觉data warehouse及business intelligence 确实是个不错的方向,前景看好.但学习了design,etl和BI tools:cognos 以后,却不知道向那个方向发展了.我的背景是.net程序员 数据库focus在oracle上,以后不想一直做程序员,所以学了data warehouse.不知各位能否给些建议.
欢乐天堂(14469910) 00:19:54
做DW也需要编程的
大米饭(722986) 00:20:55
etl 应该是的,而且现在etl的职位也挺多
就是你了(15544708) 00:22:36
做design最好了
就是你了(15544708) 00:22:54
但一般好像都是从etl开始
就是你了(15544708) 00:23:38
我跟学吧,呵
大米饭(722986) 00:26:06
呵呵,那如果把data warehouse 和 BI作为career来发展,以后的路这么走呢

您刚才发送的消息:"呵呵,那如果把data warehouse 和 BI作为career来发展,以后的路这么走呢 "没有发送成功(服务器超时).

大米饭(722986) 00:26:30
呵呵,那如果把data warehouse 和 BI作为career来发展,以后的路这么走呢
就是你了(15544708) 00:26:45
这么走还是怎么走?
大米饭(722986) 00:29:51
本来想逐渐脱离编程,可是听完cognos后,感觉bi的上层越来越接近business man的职责,逐渐脱离了IT,这并不是自己想要的,因为还是想走技术的路线
就是你了(15544708) 00:30:06
那就做ETL啊
大米饭(722986) 00:31:15
但data warehouse的设计似乎并不像不通oltp那么复杂,个人感觉不足以支撑作为一个career去发展
就是你了(15544708) 00:32:50

就是你了(15544708) 00:34:10
设计很重要,业务和技术要紧密结合
大米饭(722986) 00:34:30
etl 是个不错的方向,而且占到整个datawarehouse很大的开发资源和时间,但很多大公司不考虑费用的话,越来越倾向于采用etl tools 来做,所以目前不知道这一块的前景这么样

您刚才发送的消息:"etl 是个不错的方向,而且占到整个datawarehouse很大的开发资源和时间,但很多大公司不考虑费用的话,越来越倾向于采用etl tools 来做,所以目前不知道这一块的前景这么样 "没有发送成功(服务器超时).

大米饭(722986) 00:34:52
etl 是个不错的方向,而且占到整个datawarehouse很大的开发资源和时间,但很多大公司不考虑费用的话,越来越倾向于采用etl tools 来做,所以目前不知道这一块的前景这么样
就是你了(15544708) 00:35:20
etl tools 都比较专业,应该也不错吧
欢乐天堂(14469910) 00:36:29
作为职业发展来说,当然不错,在美国数据仓库架构师的薪水和SAP顾问相当,而且非常热门
大米饭(722986) 00:37:36
没错,70$一小时的不少
欢乐天堂(14469910) 00:37:41
只不过我们国家还没发展起来,有多少公司有专门的架构师职位
就是你了(15544708) 00:38:33
贺构师可是很难做
欢乐天堂(14469910) 00:39:47
所以很多做了几年数据仓库,还不知道架构师该干什么,因为公司里没有专门做这个的
大米饭(722986) 00:41:18
http://www.search.computerjobs.com/job_display.aspx?jobid=1794315&siteid=139&sort=pd&view=s&searchid=91874912&page=2&published=
大米饭(722986) 00:41:23
http://www.search.computerjobs.com/job_display.aspx?jobid=1797325&siteid=139&sort=pd&view=s&searchid=91874912&page=3&published=
大米饭(722986) 00:41:50
几个美国的职位和薪水
欢乐天堂(14469910) 00:44:35
ETL的薪水不是很高,我在yahoo看到过架构师给出20万美金以上的年薪
就是你了(15544708) 00:44:51
ETL比较低一层
欢乐天堂(14469910) 00:45:12
不过基本上架构师都做过ETL工作,嗬嗬
就是你了(15544708) 00:45:16
应该跟前端展现的差不多吧
大米饭(722986) 00:45:52
wow,20万 过分了吧
欢乐天堂(14469910) 00:46:01
应该是完全不同的吧。ETL可以自己开发,前端你给我开发看看,特别是OLAP
欢乐天堂(14469910) 00:46:44
别说国外,国内ebay在招数据仓库经理,也是开的年薪60万人民币
欢乐天堂(14469910) 00:47:36
我觉得目前好的出路是尽量接触国外的项目
大米饭(722986) 00:47:47
可是前端大部分会用工具来做,我弄了一段时间的cognos,感觉配置为主
就是你了(15544708) 00:48:19
我没用过
就是你了(15544708) 00:48:24
还没真正进入这一行
欢乐天堂(14469910) 00:48:24
是的,即使在美国,前端也是工具来做,所以在美国的做BI的总体薪资不如DW的高
大米饭(722986) 00:49:58
架构师似乎里我好远啊
欢乐天堂(14469910) 00:50:01
建议有经验后去外企,很可能有机会接触国外项目或者大牛,至少他们有专门的部门搞这个,你功力会大增。我就知道国内好多公司虽然也做BI&DW,但是没有专门的部门
欢乐天堂(14469910) 00:50:12
没事,有个5年经验就可以考虑了
欢乐天堂(14469910) 00:50:45
而且这行不是吃青春饭的,可以做到老,你做架构师,靠的就是经验和资历
大米饭(722986) 00:52:06
架构师是不是基本上要精通做过BI, datawarehouse 的个个部分呢?
大米饭(722986) 00:52:22
而且这行不是吃青春饭的,可以做到老 ,这个我喜欢hehe
就是你了(15544708) 00:52:22
我也喜欢
大米饭(722986) 00:52:37
hehe
欢乐天堂(14469910) 00:52:56
基本上是吧,而且大牛建议, 数据库功底最好牛点,成为半个DBA

您刚才发送的消息:"hehe2B9D11 "没有发送成功(服务器超时).

就是你了(15544708) 00:53:04
我现在就是DBA
就是你了(15544708) 00:53:16
然后想转数据仓库
欢乐天堂(14469910) 00:53:18
噢,那不错,Oracle DBA么?
就是你了(15544708) 00:53:21

大米饭(722986) 00:53:40
wow,不错呀
就是你了(15544708) 00:53:41
不过,做得越来越不专业了,现在天天查询了
大米饭(722986) 00:54:12
缘分啊,我今天上午刚刚考完OCP 的007
欢乐天堂(14469910) 00:54:09
那你最好再熟悉DB2和Teradata,以及Sybase/sql server,因为数据仓库就不像你做DBA了,要接触各种 数据库
就是你了(15544708) 00:54:36
就SQL那块呗
欢乐天堂(14469910) 00:54:55
嗬嗬,你刚开始嘛。对了做项目最好少做点后期维护,多做前期和中期实施
大米饭(722986) 00:56:25
是啊,前一段时间经过好一阵思考,决定的下来的要从application developer 转向 data warehouse 和bi
K(151417567) 00:56:37
问一下,dw主要是哪些东西?
欢乐天堂(14469910) 00:57:46
大型DW职位我给你说一下,你就清除大概哪些了
K(151417567) 00:57:59

大米饭(722986) 00:58:55
dw 其实是个概念性的东西,主要是为了支撑business的分析,和decision making
K(151417567) 00:59:13
嗯~~~和 数据库有什么区别?
欢乐天堂(14469910) 00:59:40
首先项目经理/团队领导,然后业务分析师、数据分析师,然后是架构师、建模师,再就是ETL开发工程师、前端开发工程师(包括报表开发、OLAP)、数据挖掘工程师,再就是web开发工程师,整个过程还有DBA
欢乐天堂(14469910) 01:00:22
没啥区别,DW&BI和ERP一样,你说ERP和 数据库有啥区别呢
大米饭(722986) 01:01:09
都是以 数据库为基础的
欢乐天堂(14469910) 01:01:33
是的,最终目的就是解决业务问题
欢乐天堂(14469910) 01:02:40
所以数据仓库项目职位很多种,一般先从某个方向入手,然后走向项目经理或者架构师的路子
K(151417567) 01:02:54
就是关系极端复杂的 数据库~~~是么
就是你了(15544708) 01:03:05
不能这么说
K(151417567) 01:03:14
那怎么说
大米饭(722986) 01:03:28
朋友的房东是做Teradata的,听说挺好找工作的,不过还是想从oracle 开始
欢乐天堂(14469910) 01:03:45
不一定,也许关系还没业务系统复杂呢。主要是他把业务系统的结构分散然后重组,数据量大,这是最大的特点
欢乐天堂(14469910) 01:04:31
是的,我们公司也找teradata高手,还有出国做项目的机会,问你房东有没有意向呀
K(151417567) 01:05:54
数据库引擎和数据挖掘应该是最难的吧?
K(151417567) 01:06:16
架构主要是靠经验,是么?
K(151417567) 01:06:27
是呀
K(151417567) 01:06:39
这两部分需要的知识最复杂~~~~
欢乐天堂(14469910) 01:06:41
架构当然靠经验了
就是你了(15544708) 01:06:54
TERADATE环境不多
K(151417567) 01:07:05
别的方面有什么专业知识?
欢乐天堂(14469910) 01:07:06
嗬嗬,但是都是大项目
欢乐天堂(14469910) 01:07:48
就是数据仓库本身的特点一定要熟悉。再就是结合业务,模型要和架构有紧密的联系
大米饭(722986) 01:08:11
但也有不少teradate的项目在往oracle 转
K(151417567) 01:09:16
嗯,架构必定要根据模型来决定~~~~dw的结果好坏取决于什么呢?
欢乐天堂(14469910) 01:09:30
噢,但是tetadata在数据爱仓库还是最厉害的
K(151417567) 01:10:06
我想数据挖掘算法的好坏可能对决策支持有很大的影响~~~
欢乐天堂(14469910) 01:10:24
取决于几个特点:效率高、扩展性强(能适应前端各种应用)、数据质量高
K(151417567) 01:11:47
比如说,有历年销售数据,然后要对生产量进行调整来取得最大利润,这个属不属于dw?
K(151417567) 01:11:49
bi?
欢乐天堂(14469910) 01:12:43
数据要靠DW,前端分析就是BI
K(151417567) 01:13:07
回归模型的好坏可能就对结果有很大的影响~~~我认为这方面是最主要的
K(151417567) 01:14:27
数据库人人会建,可是好的算法不是人人都能搞出来的~~~写这个算法的人拿的钱应该是最多的,是么
大米饭(722986) 01:14:35
现在很多公司的前端工具都在不断加强,比如sas的市场越做越好
欢乐天堂(14469910) 01:14:48
模型最根本的还是DW里的模型,前端的模型都是建立在DW之上的
大米饭(722986) 01:15:08
sas的数学统计模型目前是no1
K(151417567) 01:15:16
不会呀,dw的模型只是数据的存储而已,数据分析和dw有关么
欢乐天堂(14469910) 01:15:47
但是前端公司经常误导客户或者集成商。让他们以为模型主要靠BI工具,其实是特错大错
K(151417567) 01:15:58
不是这样么?
欢乐天堂(14469910) 01:16:03
难怪国内数据仓库太差,主要认识不足
K(151417567) 01:16:35
比如说,我要找生产量和利润的关系,回归模型不是第一位的,反而是怎么存储数据是主要的?
K(151417567) 01:18:34
数据库结构设计很差的话可能效率很低,但是总是能出来数据的
欢乐天堂(14469910) 01:18:56
首先你的关系怎么确认的?需要哪些数据,需要怎么转换?前端除了数据挖掘需要有自己的数学运算外,其它应用就是展示而已
K(151417567) 01:19:56
嗯,我就是说数据挖掘~~~数据挖掘直接关系到出来的结果,不是么
欢乐天堂(14469910) 01:20:34
但是这是完全不同的两个领域了,数据挖掘不需要数据仓库也可以挖掘。而数据仓库也可以不用数据挖掘应用
K(151417567) 01:21:24
哦~~~

数据仓库赚钱多还是数据挖掘赚钱多?
欢乐天堂(14469910) 01:21:41
不知道,看你精到什么程度
K(151417567) 01:22:28
那换种问法,初期投入产出比哪个高?后期投入产出比哪个高?
欢乐天堂(14469910) 01:23:06
都需要花很长时间的投入,产出后都可以很高
大米饭(722986) 01:23:13
I gonna go. See you guys!

Monday, March 27, 2006

 

Erwin summary

Four Types of IndexesERwin supports four types of indexes:·
Primary key ( PK) index ·
Foreign key ( FK) index·
Alternate key ( AK) indexes ·
Inversion entry (IE) indexes

Saturday, March 25, 2006

 

  一、 数据库设计过程
   数据库技术是信息资源管理最有效的手段。 数据库设计是指对于一个给定的应用环境,构造最优的 数据库模式,建立 数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。
   数据库设计中需求分析阶段综合各个用户的应用需求(现实世界的需求),在概念设计阶段形成独立于机器特点、独立于各个DBMS产品的概念模式(信息世界模型),用E-R图来描述。在逻辑设计阶段将E-R图转换成具体的 数据库产品支持的数据模型如关系模型,形成 数据库逻辑模式。然后根据用户处理的要求,安全性的考虑,在基本表的基础上再建立必要的视图(VIEW)形成数据的外模式。在物理设计阶段根据DBMS特点和处理的需要,进行物理存储安排,设计索引,形成 数据库内模式。
  1. 需求分析阶段
  需求收集和分析,结果得到数据字典描述的数据需求(和数据流图描述的处理需求)。
  需求分析的重点是调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求。
  需求分析的方法:调查组织机构情况、调查各部门的业务活动情况、协助用户明确对新系统的各种要求、确定新系统的边界。
  常用的调查方法有: 跟班作业、开调查会、请专人介绍、询问、设计调查表请用户填写、查阅记录。
  分析和表达用户需求的方法主要包括自顶向下和自底向上两类方法。自顶向下的结构化分析方法(Structured Analysis,简称SA方法)从最上层的系统组织机构入手,采用逐层分解的方式分析系统,并把每一层用数据流图和数据字典描述。
  数据流图表达了数据和处理过程的关系。系统中的数据则借助数据字典(Data Dictionary,简称DD)来描述。
  数据字典是各类数据描述的集合,它是关于 数据库中数据的描述,即元数据,而不是数据本身。数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分(至少应该包含每个字段的数据类型和在每个表内的主外键)。
  数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,
         取值范围,取值含义,与其他数据项的逻辑关系}
  数据结构描述={数据结构名,含义说明,组成:{数据项或数据结构}}
  数据流描述={数据流名,说明,数据流来源,数据流去向,
         组成:{数据结构},平均流量,高峰期流量}
  数据存储描述={数据存储名,说明,编号,流入的数据流,流出的数据流,   
          组成:{数据结构},数据量,存取方式}
  处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流},
          处理:{简要说明}}
  2. 概念结构设计阶段
  通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,可以用E-R图表示。
  概念模型用于信息世界的建模。概念模型不依赖于某一个DBMS支持的数据模型。概念模型可以转换为计算机上某一DBMS支持的特定数据模型。
  概念模型特点:
  (1) 具有较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识。
  (2) 应该简单、清晰、易于用户理解,是用户与 数据库设计人员之间进行交流的语言。
  概念模型设计的一种常用方法为IDEF1X方法,它就是把实体-联系方法应用到语义数据模型中的一种语义模型化技术,用于建立系统信息模型。
  使用IDEF1X方法创建E-R模型的步骤如下所示:
  2.1 第零步——初始化工程
  这个阶段的任务是从目的描述和范围描述开始,确定建模目标,开发建模计划,组织建模队伍,收集源材料,制定约束和规范。收集源材料是这阶段的重点。通过调查和观察结果,业务流程,原有系统的输入输出,各种报表,收集原始数据,形成了基本数据资料表。
  2.2 第一步——定义实体
  实体集成员都有一个共同的特征和属性集,可以从收集的源材料——基本数据资料表中直接或间接标识出大部分实体。根据源材料名字表中表示物的术语以及具有“代码”结尾的术语,如客户代码、代理商代码、产品代码等将其名词部分代表的实体标识出来,从而初步找出潜在的实体,形成初步实体表。
  2.3 第二步——定义联系
  IDEF1X模型中只允许二元联系,n元联系必须定义为n个二元联系。根据实际的业务需求和规则,使用实体联系矩阵来标识实体间的二元关系,然后根据实际情况确定出连接关系的势、关系名和说明,确定关系类型,是标识关系、非标识关系(强制的或可选的)还是非确定关系、分类关系。如果子实体的每个实例都需要通过和父实体的关系来标识,则为标识关系,否则为非标识关系。非标识关系中,如果每个子实体的实例都与而且只与一个父实体关联,则为强制的,否则为非强制的。如果父实体与子实体代表的是同一现实对象,那么它们为分类关系。
  2.4 第三步——定义码
  通过引入交叉实体除去上一阶段产生的非确定关系,然后从非交叉实体和独立实体开始标识侯选码属性,以便唯一识别每个实体的实例,再从侯选码中确定主码。为了确定主码和关系的有效性,通过非空规则和非多值规则来保证,即一个实体实例的一个属性不能是空值,也不能在同一个时刻有一个以上的值。找出误认的确定关系,将实体进一步分解,最后构造出IDEF1X模型的键基视图(KB图)。
  2.5 第四步——定义属性
  从源数据表中抽取说明性的名词开发出属性表,确定属性的所有者。定义非主码属性,检查属性的非空及非多值规则。此外,还要检查完全依赖函数规则和非传递依赖规则,保证一个非主码属性必须依赖于主码、整个主码、仅仅是主码。以此得到了至少符合关系理论第三范式的改进的IDEF1X模型的全属性视图。
  2.6 第五步——定义其他对象和规则
  定义属性的数据类型、长度、精度、非空、缺省值、约束规则等。定义触发器、存储过程、视图、角色、同义词、序列等对象信息。
  3. 逻辑结构设计阶段
  将概念结构转换为某个DBMS所支持的数据模型(例如关系模型),并对其进行优化。设计逻辑结构应该选择最适于描述与表达相应概念结构的数据模型,然后选择最合适的DBMS。
  将E-R图转换为关系模型实际上就是要将实体、实体的属性和实体之间的联系转化为关系模式,这种转换一般遵循如下原则:
  1)一个实体型转换为一个关系模式。实体的属性就是关系的属性。实体的码就是关系的码。
  2)一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性。而关系的码为各实体码的组合。
  3)一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。
  4)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
  5)三个或三个以上实体间的一个多元联系转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性。而关系的码为各实体码的组合。
  6)同一实体集的实体间的联系,即自联系,也可按上述1:1、1:n和m:n三种情况分别处理。
  7)具有相同码的关系模式可合并。
  为了进一步提高 数据库应用系统的性能,通常以规范化理论为指导,还应该适当地修改、调整数据模型的结构,这就是数据模型的优化。确定数据依赖。消除冗余的联系。确定各关系模式分别属于第几范式。确定是否要对它们进行合并或分解。一般来说将关系分解为3NF的标准,即:
  表内的每一个值都只能被表达一次。
  表内的每一行都应该被唯一的标识(有唯一键)。
  表内不应该存储依赖于其他键的非键信息。
  4. 数据库物理设计阶段
  为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。根据DBMS特点和处理的需要,进行物理存储安排,设计索引,形成 数据库内模式。
  5. 数据库实施阶段
  运用DBMS提供的数据语言(例如SQL)及其宿主语言(例如C),根据逻辑设计和物理设计的结果建立 数据库,编制与调试应用程序,组织数据入库,并进行试运行。 数据库实施主要包括以下工作:用DDL定义 数据库结构、组织数据入库 、编制与调试应用程序、 数据库试运行
  6. 数据库运行和维护阶段
   数据库应用系统经过试运行后即可投入正式运行。在 数据库系统运行过程中必须不断地对其进行评价、调整与修改。包括: 数据库的转储和恢复、 数据库的安全性、完整性控制、 数据库性能的监督、分析和改进、 数据库的重组织和重构造。

  建模工具的使用
  为加快 数据库设计速度,目前有很多 数据库辅助工具(CASE工具),如Rational公司的Rational Rose,CA公司的Erwin和Bpwin,Sybase公司的PowerDesigner以及Oracle公司的Oracle Designer等。
  ERwin主要用来建立 数据库的概念模型和物理模型。它能用图形化的方式,描述出实体、联系及实体的属性。ERwin支持IDEF1X方法。通过使用ERwin建模工具自动生成、更改和分析IDEF1X模型,不仅能得到优秀的业务功能和数据需求模型,而且可以实现从IDEF1X模型到 数据库物理设计的转变。ERwin工具绘制的模型对应于逻辑模型和物理模型两种。在逻辑模型中,IDEF1X工具箱可以方便地用图形化的方式构建和绘制实体联系及实体的属性。在物理模型中,ERwin可以定义对应的表、列,并可针对各种 数据库管理系统自动转换为适当的类型。
  设计人员可根据需要选用相应的 数据库设计建模工具。例如需求分析完成之后,设计人员可以使用Erwin画ER图,将ER图转换为关系数据模型,生成 数据库结构;画数据流图,生成应用程序。
  二、 数据库设计技巧
  1. 设计 数据库之前(需求分析阶段)
  1) 理解客户需求,询问用户如何看待未来需求变化。让客户解释其需求,而且随着开发的继续,还要经常询问客户保证其需求仍然在开发的目的之中。
  2) 了解企业业务可以在以后的开发阶段节约大量的时间。
  3) 重视输入输出。
  在定义 数据库表和字段需求(输入)时,首先应检查现有的或者已经设计出的报表、查询和视图(输出)以决定为了支持这些输出哪些是必要的表和字段。
  举例:假如客户需要一个报表按照邮政编码排序、分段和求和,你要保证其中包括了单独的邮政编码字段而不要把邮政编码糅进地址字段里。
  4) 创建数据字典和ER 图表
  ER 图表和数据字典可以让任何了解 数据库的人都明确如何从 数据库中获得数据。ER图对表明表之间关系很有用,而数据字典则说明了每个字段的用途以及任何可能存在的别名。对SQL 表达式的文档化来说这是完全必要的。
  5) 定义标准的对象命名规范
   数据库各种对象的命名必须规范。
  2. 表和字段的设计( 数据库逻辑设计)
  表设计原则
  1) 标准化和规范化
  数据的标准化有助于消除 数据库中的数据冗余。标准化有好几种形式,但Third Normal Form(3NF)通常被认为在性能、扩展性和数据完整性方面达到了最好平衡。简单来说,遵守3NF 标准的 数据库的表设计原则是:“One Fact in One Place”即某个表只包括其本身基本的属性,当不是它们本身所具有的属性时需进行分解。表之间的关系通过外键相连接。它具有以下特点:有一组表专门存放通过键连接起来的关联数据。
  举例:某个存放客户及其有关定单的3NF 数据库就可能有两个表:Customer 和Order。Order 表不包含定单关联客户的任何信息,但表内

  会存放一个键值,该键指向Customer 表里包含该客户信息的那一行。
  事实上,为了效率的缘故,对表不进行标准化有时也是必要的。
  2) 数据驱动
  采用数据驱动而非硬编码的方式,许多策略变更和维护都会方便得多,大大增强系统的灵活性和扩展性。
  举例,假如用户界面要访问外部数据源(文件、XML 文档、其他 数据库等),不妨把相应的连接和路径信息存储在用户界面支持表里。还有,如果用户界面执行工作流之类的任务(发送邮件、打印信笺、修改记录状态等),那么产生工作流的数据也可以存放在 数据库里。角色权限管理也可以通过数据驱动来完成。事实上,如果过程是数据驱动的,你就可以把相当大的责任推给用户,由用户来维护自己的工作流过程。
  3) 考虑各种变化
  在设计 数据库的时候考虑到哪些数据字段将来可能会发生变更。
  举例,姓氏就是如此(注意是西方人的姓氏,比如女性结婚后从夫姓等)。所以,在建立系统存储客户信息时,在单独的一个数据表里存储姓氏字段,而且还附加起始日和终止日等字段,这样就可以跟踪这一数据条目的变化。

  字段设计原则
  4) 每个表中都应该添加的3 个有用的字段
  ??dRecordCreationDate,在VB 下默认是Now(),而在SQL Server 下默认为GETDATE()
  ??sRecordCreator,在SQL Server 下默认为NOT NULL DEFAULT USER
  ??nRecordVersion,记录的版本标记;有助于准确说明记录中出现null 数据或者丢失数据的原因
  5) 对地址和电话采用多个字段
  描述街道地址就短短一行记录是不够的。Address_Line1、Address_Line2 和Address_Line3 可以提供更大的灵活性。还有,电话号码和邮件地址最好拥有自己的数据表,其间具有自身的类型和标记类别。
  6) 使用角色实体定义属于某类别的列
  在需要对属于特定类别或者具有特定角色的事物做定义时,可以用角色实体来创建特定的时间关联关系,从而可以实现自我文档化。
  举例:用PERSON 实体和PERSON_TYPE 实体来描述人员。比方说,当John Smith, Engineer 提升为John Smith, Director 乃至最后爬到John Smith, CIO 的高位,而所有你要做的不过是改变两个表PERSON 和PERSON_TYPE 之间关系的键值,同时增加一个日期/时间字段来知道变化是何时发生的。这样,你的PERSON_TYPE 表就包含了所有PERSON 的可能类型,比如Associate、Engineer、Director、CIO 或者CEO 等。还有个替代办法就是改变PERSON 记录来反映新头衔的变化,不过这样一来在时间上无法跟踪个人所处位置的具体时间。
  7) 选择数字类型和文本类型尽量充足
  在SQL 中使用smallint 和tinyint 类型要特别小心。比如,假如想看看月销售总额,总额字段类型是smallint,那么,如果总额超过了$32,767 就不能进行计算操作了。
  而ID 类型的文本字段,比如客户ID 或定单号等等都应该设置得比一般想象更大。假设客户ID 为10 位数长。那你应该把 数据库表字段的长度设为12 或者13 个字符长。但这额外占据的空间却无需将来重构整个 数据库就可以实现 数据库规模的增长了。
  8) 增加删除标记字段
  在表中包含一个“删除标记”字段,这样就可以把行标记为删除。在关系 数据库里不要单独删除某一行;最好采用清除数据程序而且要仔细维护索引整体性。
  3. 选择键和索引( 数据库逻辑设计)
  键选择原则:
  1) 键设计4 原则
  ??为关联字段创建外键。
  ??所有的键都必须唯一。
  ??避免使用复合键。
  ??外键总是关联唯一的键字段。
  2) 使用系统生成的主键
  设计 数据库的时候采用系统生成的键作为主键,那么实际控制了 数据库的索引完整性。这样, 数据库和非人工机制就有效地控制了对存储数据中每一行的访问。采用系统生成键作为主键还有一个优点:当拥有一致的键结构时,找到逻辑缺陷很容易。
  3) 不要用用户的键(不让主键具有可更新性)
  在确定采用什么字段作为表的键的时候,可一定要小心用户将要编辑的字段。通常的情况下不要选择用户可编辑的字段作为键。
  4) 可选键有时可做主键
  把可选键进一步用做主键,可以拥有建立强大索引的能力。

  索引使用原则:
  索引是从 数据库中获取数据的最高效方式之一。95%的 数据库性能问题都可以采用索引技术得到解决。
  1) 逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任何外键列采用非成组索引。考虑 数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写。
  2) 大多数 数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也是经常使用的键,比如运行查询显示主表和所有关联表的某条记录就用得上。
  3) 不要索引memo/note 字段,不要索引大型字段(有很多字符),这样作会让索引占用太多的存储空间。
  4) 不要索引常用的小型表
  不要为小型数据表设置任何键,假如它们经常有插入和删除操作就更别这样作了。对这些插入和删除操作的索引维护可能比扫描表空间消耗更多的时间。

  4. 数据完整性设计( 数据库逻辑设计)
  1) 完整性实现机制:
  实体完整性:主键
  参照完整性:
  父表中删除数据:级联删除;受限删除;置空值
  父表中插入数据:受限插入;递归插入
  父表中更新数据:级联更新;受限更新;置空值
  DBMS对参照完整性可以有两种方法实现:外键实现机制(约束规则)和触发器实现机制
  用户定义完整性:
  NOT NULL;CHECK;触发器
  2) 用约束而非商务规则强制数据完整性
  采用 数据库系统实现数据的完整性。这不但包括通过标准化实现的完整性而且还包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正确性。不要依赖于商务层保证数据完整性;它不能保证表之间(外键)的完整性所以不能强加于其他完整性规则之上。
  3) 强制指示完整性
  在有害数据进入 数据库之前将其剔除。激活 数据库系统的指示完整性特性。这样可以保持数据的清洁而能迫使开发人员投入更多的时间处理错误条件。
  4) 使用查找控制数据完整性
  控制数据完整性的最佳方式就是限制用户的选择。只要有可能都应该提供给用户一个清晰的价值列表供其选择。这样将减少键入代码的错误和误解同时提供数据的一致性。某些公共数据特别适合查找:国家代码、状态代码等。
  5) 采用视图
  为了在 数据库和应用程序代码之间提供另一层抽象,可以为应用程序建立专门的视图而不必非要应用程序直接访问数据表。这样做还等于在处理 数据库变更时给你提供了更多的自由。
  5. 其他设计技巧
  1) 避免使用触发器
  触发器的功能通常可以用其他方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采用触发器,你最好集中对它文档化。
  2) 使用常用英语(或者其他任何语言)而不要使用编码
  在创建下拉菜单、列表、报表时最好按照英语名排序。假如需要编码,可以在编码旁附上用户知道的英语。
  3) 保存常用信息
  让一个表专门存放一般 数据库信息非常有用。在这个表里存放 数据库当前版本、最近检查/修复(对Access)、关联设计文档的名称、客户等信息。这样可以实现一种简单机制跟踪 数据库,当客户抱怨他们的 数据库没有达到希望的要求而与你联系时,这样做对非客户机/服务器环境特别有用。
  4) 包含版本机制
  在 数据库中引入版本控制机制来确定使用中的 数据库的版本。时间一长,用户的需求总是会改变的。最终可能会要求修改 数据库结构。把版本信息直接存放到 数据库中更为方便。
  5) 编制文档
  对所有的快捷方式、命名规范、限制和函数都要编制文档。
  采用给表、列、触发器等加注释的 数据库工具。对开发、支持和跟踪修改非常有用。
  对 数据库文档化,或者在 数据库自身的内部或者单独建立文档。这样,当过了一年多时间后再回过头来做第2 个版本,犯错的机会将大大减少。
  6) 测试、测试、反复测试
  建立或者修订 数据库之后,必须用用户新输入的数据测试数据字段。最重要的是,让用户进行测试并且同用户一道保证选择的数据类型满足商业要求。测试需要在把新 数据库投入实际服务之前完成。
  7) 检查设计
  在开发期间检查 数据库设计的常用技术是通过其所支持的应用程序原型检查 数据库。换句话说,针对每一种最终表达数据的原型应用,保证你检查了数据模型并且查看如何取出数据。
  三、 数据库命名规范
  1. 实体(表)的命名
  1) 表以名词或名词短语命名,确定表名是采用复数还是单数形式,此外给表的别名定义简单规则(比方说,如果表名是一个单词,别名就取单词的前4 个字母;如果表名是两个单词,就各取两个单词的前两个字母组成4 个字母长的别名;如果表的名字由3 个单词组成,从头两个单词中各取一个然后从最后一个单词中再取出两个字母,结果还是组成4 字母长的别名,其余依次类推)
  对工作用表来说,表名可以加上前缀WORK_ 后面附上采用该表的应用程序的名字。在命名过程当中,根据语义拼凑缩写即可。注意,由于ORCLE会将字段名称统一成大写或者小写中的一种,所以要求加上下划线。
  举例:
  定义的缩写 Sales: Sal 销售;
  Order: Ord 订单;
  Detail: Dtl 明细;
  则销售订单明细表命名为:Sal_Ord_Dtl;
  2) 如果表或者是字段的名称仅有一个单词,那么建议不使用缩写,而是用完整的单词。
  举例:
  定义的缩写 Material Ma 物品;
  物品表名为:Material, 而不是 Ma.
  但是字段物品编码则是:Ma_ID;而不是Material_ID
  3) 所有的存储值列表的表前面加上前缀Z
  目的是将这些值列表类排序在 数据库最后。
  4) 所有的冗余类的命名(主要是累计表)前面加上前缀X
  冗余类是为了提高 数据库效率,非规范化 数据库的时候加入的字段或者表
  5) 关联类通过用下划线连接两个基本类之后,再加前缀R的方式命名,后面按照字母顺序罗列两个表名或者表名的缩写。
  关联表用于保存多对多关系。
  如果被关联的表名大于10个字母,必须将原来的表名的进行缩写。如果没有其他原因,建议都使用缩写。
  举例:表Object与自身存在多对多的关系,则保存多对多关系的表命名为:R_Object;
  表 Depart和Employee;存在多对多的关系;则关联表命名为R_Dept_Emp
  2. 属性(列)的命名
  1) 采用有意义的列名,表内的列要针对键采用一整套设计规则。每一个表都将有一个自动ID作为主健,逻辑上的主健作为第一组候选主健来定义,如果是 数据库自动生成的编码,统一命名为:ID;如果是自定义的逻辑上的编码则用缩写加“ID”的方法命名。如果键是数字类型,你可以用_NO 作为后缀;如果是字符类型则可以采用_CODE 后缀。对列名应该采用标准的前缀和后缀。
  举例:销售订单的编号字段命名:Sal_Ord_ID;如果还存在一个 数据库生成的自动编号,则命名为:ID。
  2) 所有的属性加上有关类型的后缀,注意,如果还需要其它的后缀,都放在类型后缀之前。
  注: 数据类型是文本的字段,类型后缀TX可以不写。有些类型比较明显的字段,可以不写类型后缀。
  3) 采用前缀命名
  给每个表的列名都采用统一的前缀,那么在编写SQL表达式的时候会得到大大的简化。这样做也确实有缺点,比如破坏了自动表连接工具的作用,后者把公共列名同某些 数据库联系起来。
  3. 视图的命名
  1) 视图以V作为前缀,其他命名规则和表的命名类似;
  2) 命名应尽量体现各视图的功能。
  4. 触发器的命名
  触发器以TR作为前缀,触发器名为相应的表名加上后缀,Insert触发器加"_I",Delete触发器加"_D",Update触发器加"_U",如:

  TR_Customer_I,TR_Customer_D,TR_Customer_U。
  5. 存储过程名
  存储过程应以"UP_"开头,和系统的存储过程区分,后续部分主要以动宾形式构成,并用下划线分割各个组成部分。如增加代理商的帐户的存储过程为"UP_Ins_Agent_Account"。
  6. 变量名
  变量名采用小写,若属于词组形式,用下划线分隔每个单词,如@my_err_no。
  7. 命名中其他注意事项
  1) 以上命名都不得超过30个字符的系统限制。变量名的长度限制为29(不包括标识字符@)。
  2) 数据对象、变量的命名都采用英文字符,禁止使用中文命名。绝对不要在对象名的字符之间留空格。
  3) 小心保留词,要保证你的字段名没有和保留词、 数据库系统或者常用访问方法冲突
  5) 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了。

你可能感兴趣的:(【DataWarehouse】)