2004年SQL培训课程专题

第一篇:数据库设计
第一部份:数据库设计概述
1、        数据库基本原理
关键点:
l        数据库是什么?
数据库是用来存储信息或数据的机制:有动态的和静态的

l        数据库环境
A.        主机环境 B.客户/服务器环境 C.互联网计算环境

l        数据库起源
业务建模是对完成日常任务和工作的处理过程的抽象,它是所有数据库的起源.
业务建模包含业务规则、业务处理、数据、需求分析、实体、属性以及二次工程
业务规则确定业务模型的结构、需要存储的数据种类以及数据如何修改和访问
在开始设计数据库之前,与业务处理的关键人物进行调研是非常重要,尤其是熟悉业务系统需求的最终用户。当都已获得并已经转化业务对象模型,例如实体和属性,业务模型也就完成了。
实体是数据的分类,而属性则是实体中特定的数据

l        组成部分
数据库模式:逻辑模型、物理模型、应用接口:   模式是存在相互关联关系的对象集合
表:物理存储的最主要、最基本的单位
列:也叫域,是存欲表中的特定种类的信息
行:一条数据记录
数据类型:字母、数字、时间、日期…

l        数据完整性
确保数据的准确性:由约束条件来控制
主键码:唯一标识表的一行数据记录
外键码:确保父子完整性,不能存在“孤儿”记录
关系:1:1, 1:N,N:N

l        数据库设计的重点
1.        设计方法
2.        把业务模型转化为数据库设计
3.        应用软件的设计
4.        数据库设计包括将业务模型转化为优化的结构化数据库模型,在系统开发的数据库设计阶段,设计人员应考虑创建表的视图、定义约束条件、保障数据完整性以及创建其他对象(如索引)
5.        我们不能期望用户完全理解数据库的结构,因此在完成数据库设计后就应该考虑开始设计客户端应用软件
l        优秀数据库标准
1.        能满足数据存储需求
2.        便于用户访问
3.        安全机制好
4.        数据准确,易于管理
5.        整体性能合理
6.        尽可能少的冗余


2、        数据库模型概述
l        平面文件数据库模型:传统的
l        层次数据模型: 父子
l        网状数据库模型 :父子方面改进点
l        关系数据库模型
l        面向对象数据库模型:通过面向对象编程方法实现数据的定义、存储和访问,最终用户软件也是通过面向对象编程语言来实现。数据库和应用软件之间是通过一个对象数据库管理系统连接
l        对象关系数据库模型: 三维结构
   
关系数据库好处:
l        性能最稳定
l        ISO和ANSI标准
l        有软件商支撑
l        不同的关系数据实现相互交换
l        使用SQL语言,便于定义和查询、操作
l        引用完整性和约束条件保护数据

关系数据库特点:
        关系模型是由IBM的Codd博士提出的,主要目的是在数据库系统中减少冗余和改善数据库完整性

关系数据库的对象
表、视图、约束、索引、触发器、过程

SQL:关系数据库语言
DDL: 数据定义语言
DML: 数据操作语言
DQL: 数据查询语言

3、        数据库设计方案

什么是数据库设计:
   Webster给的定义: 准备前期方案和草图,为确定的目标制定计划,细节组合或与组成部件的特性,巧妙地设计或创建,完成预定目标的方法的修改
数据库设计的三的基本阶段
需求信息的收集:业务如何处理,业务规则和业务处理,当前所使用的数据库信息,与新数据库相关的业务的未来需求
数据建模:业务模型转化为数据模型
数据库设计和规范化:逻辑模型转化为物理模型的过程

如何制定设计方案:
u        定义任务描述:
主要面对管理人员,包含:目标是什么?谁使用?类型是什么?如何访问?是否可以建模?是否需要修改?需要几个数据库?

u        定义设计目标      
u        制定工作计划
u        软件环境,硬件环境,开发工具,备份计划,数据库开发环境,基本标准和命名规则,办公地点
u        设定工作进程和各阶段成果
u        “里程碑”:收集信息,指定计划,定义实体和属性,逻辑设计,物理设计,测试数据库,实现产品
u        设定项目期限
u        分配任务

设计成功数据库所具有的特点:
n        数据库功能强大
n        能准确的表示业务数据
n        容易使用和维护
n        对最终用户操作的响应时间合理
n        方便结构的改进
n        方便检索和修改
n        很少的维护工作
n        有效的安全机制确保数据安全
n        冗余书局最少
n        方便数据备份和恢复
n        结构最最终用户透明

作者: ccwlm741212   发布时间: 2004-01-04

上面的是第一篇,请大家针对问题,提出疑问和补充,我们将每周一次总结相关内容

毕竟是理论知识,请大家耐心讨论才好啊

作者: ccwlm741212   发布时间: 2004-01-04

o来做点补充:
1 了解目前流行的数据库设计工具(ERWIN,VISIO,PD等),最好能熟练使用某种工具进行数据库的设计
2 关于数据仓库设计思路。

作者: xzh2000   发布时间: 2004-01-04

数据仓库设计思路: 我们会在以后的培训中具体阐述的,刚开始,是一些很基本的东西

作者: ccwlm741212   发布时间: 2004-01-04

关于数据库设计的步骤及各步骤应提交的文档内容,最好举一个数据库设计的简单的例子来说明。

作者: chuxue   发布时间: 2004-01-05



QUOTE:最初由 chuxue 发布
关于数据库设计的步骤及各步骤应提交的文档内容,最好举一个数据库设计的简单的例子来说明。

这只是一个基本的介绍啊,后面会有详细的说明



故事才刚刚开始

作者: ccwlm741212   发布时间: 2004-01-05

我们如果自己设计 数据库, 那和那些大的数据库(比如:Oracle ,MS Sql Server等)。
有什么不同呢? 他们的买很多钱?

我们为什么要自己设计呢? 什么时候需要他们的呢?

作者: flylionking   发布时间: 2004-01-05

支持一下,楼主能不能给我们推荐一下教材呢??
那样方面我们一起学习,不过是要经典一点的,我对DBA很感兴趣,不过目前还处在菜鸟鸟阶段,有望能多多得到你的提拔,哈哈

作者: sunzhou   发布时间: 2004-01-05



QUOTE:最初由 flylionking 发布
我们如果自己设计 数据库, 那和那些大的数据库(比如:Oracle ,MS Sql Server等)。
有什么不同呢? 他们的买很多钱?

我们为什么要自己设计呢? 什么时候需要他们的呢?

别人是提供工具,我们是使用工具的

作者: ccwlm741212   发布时间: 2004-01-05



QUOTE:最初由 sunzhou 发布
支持一下,楼主能不能给我们推荐一下教材呢??
那样方面我们一起学习,不过是要经典一点的,我对DBA很感兴趣,不过目前还处在菜鸟鸟阶段,有望能多多得到你的提拔,哈哈

书很多啊,不会买就多买几本啊,很难说,MS SQL经典的书不多

作者: ccwlm741212   发布时间: 2004-01-05

支持培训专题!
另请问多长时间一版,每周吗?

作者: yongeo   发布时间: 2004-01-05

re
该re时一定要re

作者: hexiaoyang   发布时间: 2004-01-05

老實和尚的說﹕
千萬不要買講MSSQL的書﹐除非你的錢多的花不完﹗

只要經常到MSSQL版來﹐偶一定會盡力幫助大家的。

作者: xzh2000   发布时间: 2004-01-05

数据库开发工具 和 制作工作 有什么不一样呢
二次开发 和 一次开发分别指什么呢

作者: flylionking   发布时间: 2004-01-05



QUOTE:最初由 flylionking 发布
数据库开发工具 和 制作工作 有什么不一样呢
二次开发 和 一次开发分别指什么呢

1、数据库开发工具: 设计数据库逻辑和物理结构的工具,如ROSE\PD,  制作工作? ?咱不懂你的意思
2、二次开发 是在一次开发的基础上,一次开发是原始项目的开发
二次开发将对一次开发的东西进行优化、修改,毕竟业务不断变化和发展的啊

作者: ccwlm741212   发布时间: 2004-01-05



QUOTE:最初由 flylionking 发布
我们如果自己设计 数据库, 那和那些大的数据库(比如:Oracle ,MS Sql Server等)。
有什么不同呢? 他们的买很多钱?

我们为什么要自己设计呢? 什么时候需要他们的呢?

你看我们用Word吧,Word是MS出的,而我们一般来说就是学习怎样用Word做出图文并茂的电子文档,当然,我们中有些人要自己做一个和word差不多的东西——譬如金山的WPS Office。
不过,像数据库这么成熟的领域不太可能做新的东西,而且目前流行的大型关系型数据库系统基本功能都差不多,只是在各自的特性上会符合不同用户的需求。

作者: wangyuzhen   发布时间: 2004-01-05

谢谢xzh2000的良言

作者: sunzhou   发布时间: 2004-01-06



QUOTE:最初由 sunzhou 发布
谢谢xzh2000的良言

哈哈,说肯定要买的,否则书店不是要关门了吗?

书主要是帮你入门和学习的, 我们这里是帮你解豁的

XZH2000大师不要误导啊

作者: ccwlm741212   发布时间: 2004-01-06

谢谢 ccw 和 wangyuzhen 的回答
那我们学习, 只要会使用就可以了。
为什么还要管它是怎么开发出来的呢? 我们又不需要区开发数据库 我们只是使用的呢。

多大的系统需要使用大型的数据库,什么情况下我们需要自己开发数据库呢?
Rose /PD 是建模的,PB/Delphi 是开发的。
建模主要是干什么的,开发又是做什么呢?

对不起,不知道的太多了,可能笨了点。

作者: flylionking   发布时间: 2004-01-06

这个太慢了

作者: flylionking   发布时间: 2004-01-06

建模主要是:  建立数据库的关系模型啊,好象家谱一样,围绕业务逻辑建立逻辑结构,就好象画图纸
开发是: 使用和操作数据库实现具体的业务

建模再前,开发再后

作者: ccwlm741212   发布时间: 2004-01-06

我们建模也是为了开发使用的吗?
建模是为了更好的开发,而不是用来设计数据库的吗?

作者: flylionking   发布时间: 2004-01-06



QUOTE:最初由 flylionking 发布
我们建模也是为了开发使用的吗?
建模是为了更好的开发,而不是用来设计数据库的吗?

建模是对数据库和业务的总体规划和设计,好象房子的结构,而开发就好象加砖添瓦

作者: ccwlm741212   发布时间: 2004-01-06



QUOTE:最初由 ccwlm741212 发布


哈哈,说肯定要买的,否则书店不是要关门了吗?

书主要是帮你入门和学习的, 我们这里是帮你解豁的

XZH2000大师不要误导啊

暈﹐難道online不是比所有的書內容都丰富嗎﹖
多看幫助﹐多思考﹐多學問﹐就足夠啦。

作者: xzh2000   发布时间: 2004-01-06

文章不错):

作者: lhyyzh   发布时间: 2004-01-06

数据库设计的基本方法  

  

  数据库设计是建立数据库及其应用系统的核心和基础,它要求对于指定的应用环境,构造出较优的数据库模式,建立起数据库应用系统,并使系统能有效地存储数据,满足用户的各种应用需求。一般按照规范化的设计方法,常将数据库设计分为若干阶段:
  系统规划阶段主要是确定系统的名称、范围;确定系统开发的目标功能和性能;确定系统所需的资源;估计系统开发的成本;确定系统实施计划及进度;分析估算系统可能达到的效益;确定系统设计的原则和技术路线等。对分布式数据库系统,还应分析用户环境及网络条件,以选择和建立系统的网络结构。
  需求分析阶段要在用户调查的基础上,通过分析,逐步明确用户对系统的需求,包括数据需求和围绕这些数据的业务处理需求。通过对组织、部门、企业等进行详细调查,在了解现行系统的概况、确定新系统功能的过程中,收集支持系统目标的基础数据及其处理方法。
  概念设计阶段要产生反映企业各组织信息需求的数据库概念结构,即概念模型。概念模型必须具备丰富的语义表达能力、易于交流和理解、易于变动、易于向各种数据模型转换、易于从概念模型导出与DBMS有关的逻辑模型等特点。
  逻辑设计阶段除了要把E-R图的实体和联系类型,转换成选定的DBMS支持的数据类型,还要设计子模式并对模式进行评价,最后为了使模式适应信息的不同表示,需要优化模式。
  物理设计阶段的主要任务是对数据库中数据在物理设备上的存放结构和存取方法进行设计。数据库物理结构依赖于给定的计算机系统,而且与具体选用的DBMS密切相关。物理设计常常包括某些操作约束,如响应时间与存储要求等。
  系统实施阶段主要分为建立实际的数据库结构;装入试验数据对应用程序进行测试;装入实际数据建立实际数据库三个步骤。
  另外,在数据库的设计过程中还包括一些其他设计,如数据库的安全性、完整性、一致性和可恢复性等方面的设计,不过,这些设计总是以牺牲效率为代价的,设计人员的任务就是要在效率和尽可能多的功能之间进行合理的权衡。  

作者: ccwlm741212   发布时间: 2004-01-06

数据库系统的产生和发展

  众所周知,数据库系统并不是在计算机产生的同时就出现的,而是随着计算机技术的不断发展,在特定的历史时期、特定的需求环境下出现的。人类在1946年发明了世界上的第一台计算机到20世纪60年代这漫长的20年里,计算机操作系统还主要局限于文件的操作,同样,对数据的管理也主要是通过文件系统来实现。进行计算所需要的各种数据存放在各自的文件里面。当要使用这些数据的时候,将文件打开,读取文件中的数据到内存中。当计算完毕后,将计算结果仍旧写入到文件中去。

  虽然这种在文件中存放数据的方式目前在很多系统中还在使用,但是,这样的数据存放方式在三四十年前的当时,就已经显示出了非常明显的不足。这些不足主要集中在无法对数据进行有效的统一管理。具体表现在这样几个方面:

程序员编写应用程序非常不方便。应用程序的设计者需要对程序所使用的文件的逻辑结构和物理结构都了解的非常清楚。而计算机操作系统只提供将文件打开、关闭、保存等非常低级的操作,而对数据的修改、查询操作则需要应用程序来解决,如果程序所需要的数据存放在不同的文件里,而且这些文件的存储格式又迥然不同。这样就给应用程序的开发带来了巨大的麻烦,程序员要为程序中所用到的每一个文件都写好相应的接口,而且不同的文件格式相差很大,这样就大大的增加了编程的工作量,从而使得在文件级别上开发应用程序的效率非常低下,严重影响应用软件的发展。


文件结构的每一处修改都将导致应用程序的修改,从而使得应用程序的维护工作量特别大。编过程序的人都有这种体会,就是每当自己开发完毕的程序需要修改的时候,又不得不将源程序重新修改、编译、链接。其麻烦程度可想而知。因为有人戏称编程人员为“老改”人员,个中滋味,外人恐怕很难体会到的。


计算机操作系统中的文件系统一般不支持对文件的并发访问。而在现代计算机系统中,为了充分发挥计算机系统的资源使用效率,一般都允许多个程序“同时”运行,即并发性。对数据库系统同样有并发性的要求,现在比较大型的数据库都有非常强的并发访问机制,这样可以充分利用数据库服务器的软、硬件资源,避免浪费。


由于基于文件系统的数据管理缺乏整体性、统一性,在数据的结构、编码、表示格式等诸多方面不能做到标准化、规范化,不同的操作系统有风格迥异的表示方式,因此在一定程度上造成了数据管理的混乱。另外,基于文件系统的数据管理在数据的安全性和保密性发面难以采取有效的措施,在一些对安全性要求比较高的场合,这种安全上的缺陷是完全不允许的。
  针对文件系统的这些重要缺点,人们逐步发展了以统一管理数据和共享数据为主要特征的系统,这就是数据库系统。数据库系统就是在这样的背景下发展起来了。1964年,美国通用电气公司开发成功了世界上的第一个数据库系统——IDS(Integrated Data Store)。IDS奠定了网状数据库的基础,并且得到了广泛的发行和应用,成为数据库系统发展史上的一座丰碑。1969年,美国国际商用机器公司(IBM)也推出世界上第一个层次数据库系统IMS(Information Management System),同样在数据库系统发展史上占有重要的地位。

  七十年代初,E.F.Codd在总结前面的层次、网状数据库优缺点的基础上,提出了关系数据模型的概念。他提出了关系代数和关系演算(直到今天,在E.F.Codd的这些基本理论还在左右这数据库系统的发展,也依然是高校计算机专业课堂上所要讲述的重要内容)。在整个七十年代,关系数据库系统无论从理论上还是实践上都去的了丰硕的成果。在理论上,确立了完整的关系模型理论、数据依赖理论和关系数据库的设计理论(在后面将重点讲述这些关系数据库的基本理论);在实践上,世界上出现了很多著名的关系数据库系统,比较著名的如System R,INGRES,Oracle等。

和文件系统相比,数据库系统有一系列的特点,具体表现在以下几个方面:

数据库系统向用户提供高级的接口。在文件系统中,用户要访问数据,必须了解文件的存储格式、记录的结构等。而在数据库系统中,这一切都不需要了。数据库系统为用户处理了这些具体的细节,向用户提供非过程化的数据库语言(即通常所说的SQL语言),用户只要提出需要什么数据,而不必关心如何获得这些数据。对数据的管理完全由数据库管理系统(DBMS: Database Management System)来实现。
 
查询的处理和优化。查询通常指用户向数据库系统提交的一些对数据操作的请求。由于数据库系统向用户提供了非过程化的数据操纵语言,因此对于用户的查询请求就由DBMS来完成,查询的优化处理就成了DBMS的重要任务。
 
并发控制。前面曾经提到,文件系统一般不支持并发操作,这样大大的限制了系统资源的有效利用。在数据库系统中,情况就不一样了。现代的数据库系统都有很强的并发操作机制,多个用户可以同时访问数据库,甚至可以同时访问同一个表中的不同记录。这样极大的提高了计算机系统资源的使用效率。
 
数据的完整性约束。凡是数据都要遵守一定的约束,最简单的一个例子就是数据类型,例如定义成整型的数据就不能是浮点数。由于数据库中的数据是持久的和共享的,因此对于使用这些数据的单位来说,数据的正确行显得非常重要。在关系数据库系统中,比较重要的完整性约束有实体完整性、域完整性、参照完整性和用户自定义的完整性等,在后面的文章中将有重点讲述。
  进入二十世纪八十年代之后,计算机硬件技术有了飞速的提高。计算机技术的提高促使计算机应用不断深入,产生了许多新的应用领域,例如计算机辅助设计、计算机辅助制造、计算机辅助教学、办公自动化、智能信息处理、决策支持等。这些新的领域对数据库系统提出了新的要求。但是由于应用的多元化,不能设计出一个统一的数据模型来表示这些新型的数据及其相互关系,因而出现了百家争鸣的局面,产生了演绎数据库、面向对象数据库、分布式数据库、工程数据库、时态数据库、模糊数据库等新型数据库的研究和应用。

  不过到目前为止,在世界范围内得到主流应用的还是经典的关系数据库系统,比较知名的如Sybase,Oracle,Informix,SQL Server,DB2等。在本系列专题文章中,我们也将根据数据库系统的实际应用情况,重点介绍关系数据库系统。其他的数据库系统,也将作简单的介绍。

作者: ccwlm741212   发布时间: 2004-01-06

如何得到一个数据库中每个表格的数据数目?
作者:


参考下列方法可以获得每个表格的数据数目。

USE pubs -- 可改成您的数据库名称
SET NOCOUNT
ONDECLARE tables_cursor CURSOR
FOR
SELECT name FROM sysobjects WHERE type = 'U'
OPEN tables_cursor
DECLARE @tablename varchar(30), @quote char(1)
SELECT @quote = '"'

FETCH NEXT FROM tables_cursor INTO @tablename
WHILE (@@fetch_status <> -1)
BEGIN
EXEC ("Select " + @quote+"Rows in " + @tablename + " = "+ @quote + ", count(*) from "+ @tablename)
FETCH NEXT FROM tables_cursor INTO @tablename
END
DEALLOCATE tables_cursor
SET NOCOUNT OFF

作者: ccwlm741212   发布时间: 2004-01-06

恩, 看来很多朋友对数据库设计有兴趣.
让偶们更加深入地探讨一下这个问题.
首先, 偶要提个简单的问题, 偶们在这里探讨的数据库设计(或者叫信息系统设计, 更确切一些)和其他一些计算机系统, 比如, WINDOWS, LINUX, OFFICE, PHOTOSHOP, SQL SERVER, ORACLE等等这些系统的开发和设计, 有什么不同呢?

作者: lodge   发布时间: 2004-01-07



QUOTE:最初由 lodge 发布
恩, 看来很多朋友对数据库设计有兴趣.
让偶们更加深入地探讨一下这个问题.
首先, 偶要提个简单的问题, 偶们在这里探讨的数据库设计(或者叫信息系统设计, 更确切一些)和其他一些计算机系统, 比如, WINDOWS, LINUX, OFFICE, PHOTOSHOP, SQL SERVER, ORACLE等等这些系统的开发和设计, 有什么不同呢?

从软件的角度看,一个是应用软件的设计,一个是系统软件的设计
比较形相的说,一个是怎样用工具做好工作,一个是怎样制造工具

作者: ccwlm741212   发布时间: 2004-01-08