Ch13数据库与SQL语言_第1页
Ch13数据库与SQL语言_第2页
Ch13数据库与SQL语言_第3页
Ch13数据库与SQL语言_第4页
Ch13数据库与SQL语言_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ASP.NET动态网站开发教程ASP.NET动态网站开发教程

http://第13章数据库与SQL语言数据库是“按照数据结构来组织、存储和管理数据的仓库”。以二维表格的形式存放数据的数据库,称为关系型数据库职工号姓名性别出生日期地区代码工资简历00001赵岩男1976/5/250101680……00002张曼曼女1978/1/260211560……00003李小华女1983/10/300241630……00004徐海男1973/12/200262100……:::::::开发动态网站并没有强制必须使用数据库,但是,开发一个功能强大的动态网站却离不开数据库13.1设计一个良好的数据库13.1.1基本术语13.1.2规范化设计13.1.1基本术语

语解

释实体数据表的每一行表示一个实体,也称为记录。同一表中不能出现完全相同的两行记录关系一个关系的逻辑结构就是一张二维表,它描述各个实体之间的关系属性数据表的每一列是一个属性(也称为字段)。在标题栏中表示属性的名称,在表中显示各实体的属性值域属性的取值范围,例如,正常的成绩必须在零以上关系模式即对关系的描述,其格式为:关系名(属性名1,属性名2,…属性名n)关键字可以唯一地表示和区分实体的一个属性或多个属性的组合称为关键字。例如,表13-1中的职工号就可以作为关键字主关键字(主键)在一个关系中可能存在多个关键字,从中可以选择一个作为主关键字外关键字(外键)用来表示一个表和另一个表建立联系的属性,体现了表之间的联系。例如,表13-1中的地区代码在同一个表中,记录和字段的次序无关紧要

13.1.2规范化设计

设计不好的数据库表会给数据管理带来很多问题,同时,也会带来大量的数据冗余规范化设计(三范式)第一范式(1NF)第二范式(2NF)第三范式(3NF)1)第一范式(1NF)确保每列的原子性(每列都是不可再分的最小数据单元)2)第二范式(2NF)满足1NF,并且除了主键以外的其他列,都依赖与该主键(每个表只描述一件事情)3)第三范式(3NF)满足2NF,并且除了主键以外的其他列都不传递依赖于主键列“订单编号”和“顾客姓名”并不是直接相关,而是通过“顾客编号”相关的(顾客姓名有可能重名,所以应以顾客编号进行唯一区分),这就是传递依赖。因此,为满足第三范式,需要将其再拆分为两个表——订单表和顾客表13.1.3规范化实例假设某建筑公司要设计一个数据库。公司的业务规则概括说明如下:公司承担多个工程项目,每一项工程有:工程号、工程名称、施工人员等;公司有多名职工,每一名职工有:职工号、姓名、性别、职务(工程师、技术员)等;公司按照工时和小时工资率支付工资,小时工资率由职工的职务决定(例如,技术员的小时工资率与工程师不同)。工程号工程名称职工号姓名职务小时工资率工时实发工资A1花园大厦1001齐光明工程师6513845.001002李思岐技术员6016960.001004葛宇宏律师60191140.00

小计

2945.00A2立交桥1001齐光明工程师6515975.001003鞠明亮工人5517935.00

小计

1910.00A3临江饭店1002李思岐技术员60181080.001004葛宇洪技术员6014840.00

小计

1920.001)按第一范式规范化工程号工程名称职工号姓名职务小时工资率工时A1花园大厦1001齐光明工程师6513A1花园大厦1002李思岐技术员6016A1花园大厦1003鞠明亮工人5517A3临江饭店1002李思岐技术员6018A3临江饭店1004葛宇洪技术员6014“实发工资”字段和数据记录“小计”由于能在计算机输出时自动计算出来,因此就没有必要将其保存到数据库中图中这种设计还会出什么问题?(1)表中包含大量的冗余,可能会导致数据异常。包括:更新异常。例如,若只修改“职工号”为“1001”的那个人的职务,则在表中,就必须修改记录中所有“职工号”=“1001”的行,只要有一个目标记录没有被更新到,数据就会不准确;添加异常。若要增加一个新的职工,必须要先给这名职工分配一个工程,即时他实际上可能并没有参与。或者,为了添加这一名新职工的数据,先给这名职工分配一个虚拟的工程。(因为主关键字不能为空);删除异常。例如,“1001”号职工要辞职,则必须删除所有“职工号”=“1001”的数据行。这样的删除操作,很可能丢失了其它有用的数据,比如“工程师”职务的“小时工资率”这个发放标准“65”就无意中丢失了。(2)采用这种方法设计表的结构,虽然很容易产生工资报表,但是每当为一名职工分配一个工程时,都要重复输入大量的数据(如职务、小时工资率)。这种重复的输入操作,很可能导致数据的不一致性。问题的根源,就是一张表描述了多件事情2)按第二范式规范化对表进行拆分,使其每个拆分的表中,除了主键以外的其他列,都依赖与该主键3)按第三范式规范化按第三范式的要求,除了主键以外的其他列都不传递依赖于主键列。其中员工表的“小时工资率”虽然依赖于主键“职工号”,但却是通过“职务”传递依赖过去的。应该把它划分为另外一个职务表堪称完美!4)实际创建数据表表的关系表面看起来,原来只使用一个表存放数据,经过规范后反变成了使用4个表存放数据,好似变得繁琐了。但实际上,经过此番处理后,数据的冗余量大大减少(尤其数据很多的情况下)对数据的增、删、改处理发生异常的可能也完全避免了。对于数据的统计和分析也变得非常方便。利远远大于弊

13.2常与ASP.NET配套的数据库1)Access数据库2)SQLServer数据库SQLServer2000/2005ServerSQLServer2005Express

SQLServer2005SQLServerManagementStudioSQLServer2005(续)查询编辑器

SQLServer2000企业管理器

SQLServer2000(续)查询分析器Access案例:使用SQLServer2000存放“通讯录”信息SQLServer2000数据表结构设计案例:使用Access存放“通讯录”信息Access数据表结构设计字段名称类型宽度必填字段标题说明ID自动编号YES编号主键Name文本10YES姓名Sex文本2NOT性别默认值“男”Birth日期/时间NOT出生日期E_mail文本40NOT电子邮箱Telephone文本40NOT联系电话Address文本40NOT通信地址Postcode文本6NOT邮政编码13.3利用VisualStudio的【服务器资源管理器】管理数据库

13.4SQL语言基础SQL是结构化查询语言(StructuredQueryLanguage)的英文缩写,由于其功能丰富、语言简捷,现已成为关系型数据库的标准语言。可以使用VisualStudio的【服务器资源管理器】来执行SQL13.4.1查询语句SELECTApplicationLogic客户程序查询请求查询结果集数据库ABCDEFG

SELECT*FROM数据表名称查询产生一个虚拟表,看到的是表形式显示的结果,但结果并不真正存储,每次执行查询只是现从数据表中提取数据,并按照表的形式显示出来怎么查的?学员编号学员姓名地址所在班级…….001张明全湖南长沙S201002李菲湖北宜昌S202003于寄谦甘肃天水S204004刘国正山东荷泽S201005周接轮台湾新竹S204006巩小妹香港龙湾S203007巩大妹香港龙湾S203008张明敏北京顺义S202009矛十八四川棉阳S204010罗林光陕西临潼S202011司马坡新疆喀什S201S202陕西临潼罗林光010…S202湖北宜昌李菲002S202北京顺义张明敏008SELECT*FROMStudentsWHERE所在班级

=‘S202’查询SELECT<列名>FROM

<表名>[WHERE<查询条件表达式>][ORDERBY<排序的列名>[ASC或DESC]]

列名称SELECT

SCode,

SName,

SAddress

表名FROMStudents过滤条件WHERE

SSEX=0排序条件ORDERBY

SCodeSELECT

SCode,SName,SAddress

FROM

StudentsWHERE

SSEX=0

ORDERBY

SCode数据查询-基础查询全部的行和列SELECT*FROMStudents

查询部分行SELECT

SCode,SName,SAddressFROMStudentsWHERE

SAddress=‘北京市朝阳区'SELECT

SCode,SName,SAddressFROMStudentsWHERE

SAddress<>‘沈阳市皇姑区'升序排列SELECT*FROMStudentsWHERE所在班级=‘S202’ORDERBYScore降序排列SELECT*FROMStudentsWHERE所在班级=‘S202’ORDERBYScoreDESC数据查询-排序聚合函数AVG返回平均值COUNT返回SELECT语句查询所得的记录数量。使用COUNT时,字段名称可用*代替,如COUNT(*)MAX返回最大值MIN返回最小值SUM返回和值SELECTCOUNT(*)AS不及格人数FROMStudentWHEREScore<60多表查询—问题建筑公司工资报表最终划分为4个表,分别是工程表、员工表、职务表和项目工时表。如何同时从这些独立的表中取得数据?员工表

职工号姓名职务1001100210031004齐光明李思岐鞠明亮葛宇洪工程师技术员工人技术员………职务表

职务工程师技术员工人… 小时工资率656055…查询结果职工号1001100210031004姓名小时工资率齐光明李思岐鞠明亮葛宇洪65605560………SELECT职工号,姓名,小时工资率FROM职务表,员工表WHERE职务表.职务=员工表.职务13.4.2插入语句INSERTINSERT[INTO]<数据表名

>[列名]VAlUES<值列表>INSERT员工表(职工号,姓名,职务)VALUES('1005','任吾学','工程师')例如:向员工表内添加一名新的员工:

(职工号为1005,姓名为任吾学,职务为工程师)13.4.3更新语句UPDATEUPDATE<数据表名

>SET

字段名1=新的字段值1,字段名2=新的字段值2,……[WHERE

条件表达式]

UPDATE员工表SET职务='技术员'WHERE职工号='1005'

例如:将员工表内职工号为1005的员工职务更改为技术员

13.4.4删除语句DELETEDELETE

[FROM]

数据表名[WHERE

条件表达式]

DELETE员工表WHERE姓名='任吾学'

例如:删除员工表内姓名为任吾学的记录

ASP.NET动态网站开发教程

http://本章小结本章通过创建“通讯录”数据库案例,介绍了利用Access2003和SQLServer2000创建数据库的基本流程,学习了数据库及表的创建方法和基本使用方法。任何应用程序向数据库系统发出命令以获得数据库系统的响应,最终都必然体现为SQL语句形式的指令,所以在本章最后详细介绍了SQL语言。为了设计结构良好的数据库,需要遵守一些专门的规则,称为数据库的设计范式。第一范式(1NF)的目标:确保每列的原子性。第二范式(2NF)的目标:确保表中的每列,都和主键相关

第三范式(3NF)的目标:确保每列都和主键列直接相关,而不是间接相关这里给出一个学习SQL不错的网站:深入浅出SQL指南,网址是http:///ASP.NET动态网站开发教程清华大学出版社1.填空题(1) SQLServer数据库的存储结构包括

。(2) 一个SQLServer数据库至少应该包含一个

文件和一个

文件。(3) 在Access2003中,通过

来执行SQL语句,而在SQLServer2000中,通过

来执行SQL语句。(4) SQL语言中,用于排序的是

子句。2.选择题(1) 下列哪个关键字在SELECT子句中表示所有列?()A.*B.ALLC.DESCD.DISTINCT(2) 下列哪个聚合函数可以计算平均值?()A.SUMB.AVGC.COUNTD.MIN(3) 下列哪个聚合函数可以计算某一列上的最大值?()A.SUMB.AVGC.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论