登陆注册
8724600000019

第19章 数据分析、设计及实现(2)

非规范化设计的主要优点是减少了查询操作所需的连接;减少了外部键和索引的数量;可以预先进行统计计算,提高了查询时的响应速度。非规范化存在的主要问题是增加了数据冗余;影响数据库的完整性;降低了数据更新的速度;增加了存储表所占用的物理空间。其中最重要的是数据库的完整性问题。这一问题一般可通过建立触发器、应用事务逻辑、在适当的时间间隔运行批命令或存储过程等方法得到解决。

5)物理设计阶段

数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于给定的计算机系统。为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。

(1)将逻辑数据模型转换成目标DBMS

在物理设计阶段,首先将逻辑设计阶段得到的模型转换为特定数据库管理系统的对象。

(2)SQL Server中对象的设计

建立数据表后,还要建立一系列数据库对象,来辅助数据库的各种操作。下面以SQL Server数据库为例,介绍数据库系统的一些对象的建立和应用。

①视图(View)。

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图在数据库中不是以存储的数据集合形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储组织中不同地区的数据,而需要将这些服务器上相似结构的数据组合起来,这种方式就很有用。

视图的创建:

CREATE VIEW[.][.]view_name[(column,...n])]

[WITH[,...n]]

AS

select_statement

[WITH CHECK OPTION]

:={ENCRYPTION|SCHEMABINDING|VIEW_METADATA}

下例创建具有简单SELECT语句的视图。当需要频繁地查询列的某种组合时,简单视图非常有用。

USE pubs

IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS

WHERE TABLE_NAME=’titles_view’)

DROP VIEW titles_view

GO

CREATE VIEW titles_view

AS

SELECT title,type,price,pubdate

FROM titles

GO

SQLSERVER中可以用drop和alter语句删除和修改视图。

②函数(function)。

函数是由一个或多个Transact—SQL语句组成的子程序,可用于封装代码以便重新使用。Microsoft SQL Server 2000并不将用户限制在定义为Transact—SQL语言一部分的内置函数上,而是允许用户创建自己的用户定义函数。可使用CREATE FUNCTION语句创建、使用ALTERFUNCTION语句修改及使用DROPFUNCTION语句除去用户定义函数。每个完全合法的用户定义函数名(database_name.owner_name.function_name)必须唯一。SQL Server2000支持3种用户定义函数:标量函数,内嵌表值函数和多语句表值函数。

这里主要介绍前两类。

标量函数:标量函数返回在RETURNS子句中定义的类型的单个数据值。下面是一个返回nvarchar类型的示例:

use northwind

create function fn_NewRegion(@myinput nvarchar(30))

returns nvarchar(30)

begin

if@myinput is null

set@myinput=’Not Applicable’

return@myinput

end

go

内嵌表值函数:表值函数返回table。下面例子返回内嵌表值函数。

USE pubs

GO

CREATE Function SalesByStore(@storeid varchar(30))

RETURNS TABLE

AS

RETURN(SELECT title,qty

FROM sales s,titles t

WHERE s.stor_id=@storeid and

t.title_id=s.title_id)

存储过程(storeprocedure)。存储过程是SQL语句和可选控制流语句的预编译集合,以一个名称存储,并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过调用执行,而且允许用户声明变量、有条件执行及其他强大的编程功能。存储过程可包含程序流、逻辑及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。

下面的例子同时显示了3种不同的返回操作。

存储过程同时返回:使用“select”选出的数据集,输出形参,return输出。

create procedure dbo.materialbyout(@code int,@name varchar(30)output)

as

select*from r2_mdetail

select@name=mname from r2_mdetail where mcode=@code

return(select mpprice from r2_mdetail where mcode=@code)

go

以下是对于上面存储过程的调用,用户可以看到如何调用不同的返回值。

declare@a varchar(30)

declare@b int

exec@b=materialbyout 1,@name=@a output

select@a

select@b

③索引(index)。

可以利用索引快速访问数据库表中的特定信息。索引是对数据库表中一个或多个列[例如,employee表的姓氏(lname)列]的值进行排序的结构。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。

索引提供指针以指向存储在表中指定列的数据值,然后根据指定的次序排列这些指针。数据库使用索引的方式与使用书的目录很相似:通过搜索索引找到特定的值,然后跟随指针到达包含该值的行。

索引类型:根据数据库的功能,可在数据库设计器中创建3种类型的索引——唯一索引、主键索引和聚集索引。以下主要介绍前两种索引。

唯一索引:唯一索引不允许两行具有相同的索引值。

如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。例如,如果在employee表中的职员姓氏(lname)列上创建了唯一索引,则所有职员不能同姓。

创建唯一索引操作步骤如下。

a.在数据库关系图中选择要创建索引的表,右击该表,然后从快捷菜单中选择【索引/键】命令。

b.或者,为要创建索引的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择【索引/键】命令。

c.选择【新建】命令。【选定的索引】列表显示系统分配给新索引的名称。

d.在【列名】下选择要创建索引的列,可以选择多达16列。为获得最佳性能,只为每个索引选择一列或两列。对所选的每个索引,指出索引是按升序还是降序组织列值。

e.选择【创建UNIQUE】复选框。

f.选择【索引】选项。

g.如果要忽略将在索引中创建重复键的新数据或更新数据(使用INSERT或UPDATE语句),则选择【忽略重复键】选项。

当保存表或关系图时,索引即创建在数据库中。如果某列有多行包含NULL值,则不能在该列上创建唯一索引。同样,如果列的组合中有多行包含NULL值,则不能在多个列上创建唯一索引。在创建索引时,这些被视为重复的值。

主键索引:数据库表通常有一列或列组合,其值用来唯一标识表中的每一行,该列称为表的主键。

在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。

④约束(check)。

约束定义关于列中允许值的规则,是强制完整性的标准机制。使用约束优先于使用触发器、规则和默认值。查询优化器也使用约束定义生成高性能的查询执行计划。

SQL Server2000支持五类约束。

NOTNULL指定不接受NULL值的列。

CHECK约束对可以放入列中的值进行限制,以强制执行域的完整性。

CHECK约束指定应用于列中输入的所有值的布尔(取值为TRUE或FALSE)搜索条件,拒绝所有不取值为TRUE的值。可以为每列指定多个CHECK约束。下例显示名为chk_id约束的创建,该约束确保只对此关键字输入指定范围内的数字,以进一步强制执行主键的阈。

CREATE TABLE cust_sample

cust_id int PRIMARY KEY,

cust_name char(50),

cust_address char(50),

cust_credit_limit money,

CONSTRAINT chk_id CHECK (cust_id BETWEEN 0 and 10000)

UNIQUE约束在列集内强制执行值的唯一性。

对于UNIQUE约束中的列,表中不允许有两行包含相同的非空值。主键也强制执行唯一性,但主键不允许空值。UNIQUE约束优先于唯一索引。PRIMARYKEY约束标识列或列集,这些列或列集的值唯一标识表中的行。在一个表中,不能有两行包含相同的主键值。不能在主键内的任何列中输入NULL值。在数据库中NULL是特殊值,代表不同于空白和0值的未知值。建议使用一个小的整数列作为主键。每个表都应有一个主键。一个表中可以有一个以上的列组合,这些组合能唯一标识表中的行,每个组合就是一个候选键。数据库管理员从候选键中选择一个作为主键。例如,在part_sample表中,part_nmbr和part_name都可以是候选键,但是只将part_nmbr选作主键。

CREATE TABLE part_sample

(part_nmbr int PRIMARY KEY,

part_name char(30),

part_weight decimal(6,2),

part_color char(15))

FOREIGNKEY约束标识表之间的关系。

一个表的外键指向另一个表的候选键。当外键值没有候选键时,外键可防止操作保留带外键值的行。在下例中,order_part表建立一个外键,引用前面定义的part_sample表。通常情况下,order_part在order表上也有一个外键,下面只不过是一个简单示例。

CREATE TABLE order_part

(order_nmbr int,

part_nmbr int

FOREIGN KEY REFERENCES part_sample(part_nmbr)

ON DELETE NO ACTION,

qty_ordered int)

GO

如果一个外键值没有候选键,则不能插入带该值(NULL除外)的行。如果尝试删除现有外键指向的行,ONDELETE子句将控制所采取的操作。ONDELETE子句有两个选项:

NOACTION指定删除由于错误而失败。

CASCADE指定还将删除包含指向已删除行的外键的所有行。

如果尝试更新现有外键指向的候选键值,ON UPDATE子句将定义所采取的操作。它也支持NOACTION和CASCADE选项。

⑤规则(rule)。

规则是一个向后兼容的功能,用于执行一些与CHECK约束相同的功能。CHECK约束是用来限制列值的首选标准方法。CHECK约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个CHECK约束。CHECK约束作为CREATETABLE语句的一部分进行指定,而规则以单独的对象创建,然后绑定到列上。

下例创建一个规则,执行与前面主题中的CHECK约束示例相同的功能。Microsoft SQL ServerTM 2000首选的方法是CHECK约束。

CREATE RULE id_chk AS@id BETWEEN 0 and 10000

GO

CREATE TABLE cust_sample

cust_id int PRIMARY KEY,

cust_name char(50),

同类推荐
  • 中国移动智能手机的秘密

    中国移动智能手机的秘密

    《中国移动智能手机的秘密》是一本关于移动终端和移动互联网的科普书。作者将这18年通信行业中的学习、思考、实践积累成《中国移动智能手机的秘密》与大家分享。书本系统总结了手机的发展历史、TD产业界“从2G向3G演进”的移动终端产业分化重组进程、智能手机的使用方法用方法和应用指南,以及对移动互联网发展独特思考。
  • 网络广告经纪人

    网络广告经纪人

    本书为网络广告经纪人培训认证的指定教材,该认证是商务部中国商务广告协会和信息产业部中国电子商会联合推出的,旨在为国家造就和培养出一大批网络广告梯队型人才。该教材包括网络广告经纪人的介绍和发展趋势,以及网络广告的原理、策划、设计、制作、发布与交换、效果评估、管理,以及网络广告营销的国内外最新的成功案例,还提供了一些常用的网络广告制作工具。本教材适合助理网络广告经纪人和网络广告经纪人层次使用。也可作为高校广告、电子商务等专业的教材。
  • FlashCS动画制作基础

    FlashCS动画制作基础

    适合爱好flash动画制作的初、中级读者作为入门学习的参考书,还可以供从事网页制作与动画设计的人员参考,同时也可以作为初、中级电脑短训班的培训教材,对有一定经验的flashcs5使用者也有很高的参考价值。
  • 大话设计模式

    大话设计模式

    本书主要采用JAVA语言介绍设计模式中比较常见的23种设计模式,分29章具体介绍,以现实生活中常见的事情为例来具体分析讲解。
  • 现代企业财务软件应用教程

    现代企业财务软件应用教程

    本书内容包括财务软件概论、系统管理、企业应用平台、总账管理、报表管理、薪资管理、固定资产管理、应收款管理、应付款管理等。
热门推荐
  • 慈悲道场忏法传

    慈悲道场忏法传

    本书为公版书,为不受著作权法限制的作家、艺术家及其它人士发布的作品,供广大读者阅读交流。
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 霸爱

    霸爱

    她,精明能干,是凌宇集团的总裁。她,冷酷霸道,是商界人见人怕的鬼见愁。她,美艳不可方物,是社交界的人人争抢的对象。她,风流成性,换男人如换衣服,身边的男人从来没有超过一个月的。她,是世人眼中的天之娇女,一个又一个男人前仆后继的牺牲在她的多情和无情下。他,是一个孤儿,只为自己活着。他,是一个男妓,为了生活而出卖尊严。他,是一个温柔的人,面对这样的生活他还是选择了微笑。她霸道的顺应自己的心,掠夺他的身体和他的心。他只展露温柔,将自己的自卑深藏在心里。她和他是不同世界的两个人,却在偶然也是必然间相遇了,开始了属于他们的爱情故事。================推荐:《我是大姐大》简介:龙行天下,战意绵绵,噬魂无畏,横扫猖狂!“都别迷恋姐,姐就是个传说!”拥有如此人生格言的女主够辣,够狂,够强悍!龙战宝儿,本是黑道大姐大,却穿越到了一个充满奇幻的魔法世界,成为帝国公爵的女儿,拥有了强大的家世,集万千宠爱于一身。她带领她的近卫队成立噬魂佣兵团,铁血无畏,横扫猖狂大陆,兽王以供奉之神的名义起誓对她誓死追随,精灵之皇吟唱着自然的咒语跪在她的脚边尊她为主,天使亲手奉上洁白的羽翅以示臣服,魔族群臣跪迎奉她为王……她建立自己的政权,创造自己的规则,成为永恒的神话!她的人生信条是:吖的,不服的都站出来,男的阉了,女的奸了,看谁还敢不服!……武技+魔法+魔兽+战争+众多种族=猖狂大陆!强悍+狂傲+暴力+铁血+誓死不屈=龙战宝儿!穿越+魔幻+女尊+YY+众多帅哥=我是大姐大!……且看,龙战宝儿,笑傲猖狂!网址链接:
  • 神之三国

    神之三国

    “该死的,我怎么会来到这个世界?要知道这个世界就算是普通版本都属于地狱难度了,更别说这超神版本的了。”墨尘暗自嘀咕中。三国,神之三国,这是一个超武世界,也是一个谋略与武力并存的世界,现代人墨尘的新生活将在这里展开,他将利用自身的能力,在这天下无双的世界中,与那些名传千古的绝代人物,一较高下。设定,情节全部原创,不弄虚作假,就是这么愉快。
  • EXO我的十二个亲哥哥

    EXO我的十二个亲哥哥

    她叫安宥莉,是上帝的宠儿,生活在一个大富大贵的家里,父亲是国内顶尖的安氏集团的董事长,潇洒英俊,母亲是驻华使馆的主席,美丽温柔。家里有十二个亲哥哥,各个长得绝代风华,自然她也是绝代美人。生活在这样的一个家庭里,宥莉从小就被爸爸妈妈和十二个哥哥宠爱着,衣来伸手饭来张口,无忧无虑。宥莉和哥哥们的生活会有什么事发生?敬请期待吧~【纯属原创,请勿抄袭,如有雷同,纯属巧合】
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 童话系导演

    童话系导演

    于今就是个拍动画片的导演。出品了《猫和老鼠》、《米老鼠和唐老鸭》、《白雪公主》、《数码宝贝》、《火影忍者》、《海贼王》、《冰雪奇缘》等一系列优秀动画片。全世界都认为,我们的童年被于今承包了。电影同行认为,于今之所以拍动画片,就是在坑家长出钱带小孩去他家迪士尼乐园消费。交流群:322125253
  • 农家小医仙:捡个王爷来砍柴

    农家小医仙:捡个王爷来砍柴

    一朝穿越之后好不容易摆脱了傻子的身份,结果在养家糊口的路上又捡到一个傻子!家徒四壁,负债累累也就够了,这傻子还给家里添乱?不过不要紧,治病医人,发家致富,没有刘瑶摆平不了的事,调教傻子当然也不在话下,况且他人傻,长得却赏心悦目……只是很久之后她才发现,原来傻子不傻,还是个……王、王爷!?【情节虚构,请勿模仿】
  • 割裂的十人

    割裂的十人

    善恶终有报,有些事从一开始就已经注定了未来的结果。
  • 邪修老祖在都市

    邪修老祖在都市

    道法末纪,中原灵气枯竭,各路牛鬼蛇神蜂拥而至,看徐行如何逐鹿中原