一、数据库设计过程
数据库技术是信息资源管理最有效的手段。数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。
数据库设计中需求分析阶段综合各个用户的应用需求(现实世界的需求),在概念设计阶段形成独立于机器特点、独立于各个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) 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了。
㈡ 有一套SQL的题谁给做一下
好长啊==
从学生表中查询 姓名为王芳 年龄19 性别为女 的所有信息
学生表 按年龄排降序 查询第一条(也就是年龄最大的学生)的所有信息
学生表中 按年龄升序 查询姓李的所有信息
0-50 所有偶数的sum值
学生表中的平均,总和,最大,最小(是不是有问题,怎么会有重复的)
查询学生表中 姓名为张三 年龄20 性别为女 的姓名,性别,年龄
这么多重复的真的大丈夫吗==!
综合
参考六
条件语句为 生源地=唐山
参考五和六
参考三
我没看明白 sum求和 表起别名 as 学生人数
group by 班级号 desc
update 学生表 set 姓名=千颂伊 where 学号=5103
between 5101 and 5103
delete * from 学生表 where 姓名=都敏俊
drop table student
1.查询语句 显示列 商店代号 商店名 where city=长沙
2. 查询语句 显示列 商店名 where bname=书包
E-R图
一对多的关系 顾客表 和商品表
2. 表中标明 主外键 约束关系
㈢ 那个我也想要一个数据库设计事例,就是火车售票管理SQL
目录
概述: 5
1. 需求分析 5
1.1 用户需求: 5
1.2 业务流程分析: 6
1.3 信息需求分析 6
1.4 功能需求分析: 7
2. (数据库)概念(模型)设计 8
2.1构思ERD的四条原则及根据这些原则相应得出的实体、联系及其属性: 9
2.2、系统具体E-R图: 9
3. (数据库)逻辑(模型)设计 10
3.1 一般逻辑模型设计: 10
3.2 具体逻辑模型设计: 11
4. 数据库物理设计与数据库保护设计 12
5. 处理功能设计 12
5.1 主控模块设计: 12
5.2 子模块设计: 13
6. 数据库应用系统的实现 14
6.1 数据库及其表结构的建立: 14
6.2 创建表的相关视图: 16
6.3 各表关系图, 16
6.4 数据输入:利用系统录入数据,如下图为各表内容: 17
6.5 模块实现: 18
7. 数据库应用系统运行 26
7.1 写出系统操作使用的简要说明。 26
7.2 按使用说明运行系统并打印出运行结果。 26
7.3 系统评价: 27
报告内容
概述:
随着国民经济快速发展, 人们出行、交通越来越频繁, 对服务的快捷、便利性要求也越来越高。从而对客运行业的建设与管理提出了更高的要求。为适应和推动客运行业的发展, 各种交通公司和部门开始广泛采用使用日趋成熟的计算机技术和数据库技术来实现票务信息的现代化管理,具有手工管理所无法比拟的优点,如:检索迅速,查找方便,可靠性高,存储量大,保密性好,寿命长,成本底等。这些优点能够极大地提高信息管理和业务管理的效率。
本学生火车订票系统正是通过数据库存储信息实现高效率管理。该实验设计首先进行需求分析,然后在需求文档的指导下实现系统的功能,如操作员的信息管理功能及普通学生的火车信息查询、订票、退票等功能,最终实现的是学生购得一张自己满意的票券,同时力求通过数据库系统及计算机在其中的运用达到提高工作效率,节约人力资源的效果。
1. 需求分析
1.1 用户需求:
(一)、问题描述:
学生火车票定票系统
(1)背景:一年两次的火车票订票管理
(2)主要实现以下功能:
1)学生基本信息的管理,尤其是所在地
2)学生购票的基本信息,尤其是价钱和车票目的地
3)购票以后的分发管理
4)退票的管理
5)信息的统计和查询
6)操作员管理
(二)、目的及现状:
1)、实验目的:
数据库设计就是要使学生采用本课程中学习的数据库设计方法,运用其基本思路与主要图表工具完成一个自己所了解的业务的数据库应用系统信息需求分析与数据库的概念设计、逻辑设计、物理设计以及处理功能设计,用自己熟悉的数据库管理系统、程序设计语言及其相关开发工具实现该系统,并运行、评价、改进之;在此基础上严格按本大纲所附报告提纲撰写课程设计报告。通过本设计进一步弄懂数据库系统及其相关的基本概念,理解数据库系统的系统结构、主要特点,掌握数据库设计的原理、方法及其基本过程,初步具备数据库应用设计的能力,初步形成运用数据库应用系统解决管理决策中的实际问题的基本素质。
2)、现状和系统要求:
在传统模式下利用人工进行火车订票业务,存在着较多的缺点,如:效率底,保密性差,时间一长将产生大量的文件和数据,更不便于查找,更新,维护等。诸如这些情况,给各相关部门工作人员带来了很大困难,严重影响了他们的工作效率。运用计算机技术和数据库技术来实现票务信息的现代化管理,具有手工管理所无法比拟的优点,如:检索迅速,查找方便,可靠性高,存储量大,保密性好,寿命长,成本底等。这些优点能够极大地提高信息管理和业务管理的效率。
在本系统中,系统用户共有两种, 并根据用户权限的不同而实现不同的功能,如操作员
拥有添加、修改、删除某火车相关信息及修改自己的个人信息的功能。学生有对车票信息、、哪一车次哪天还剩余多少张票和自己所订票券的查询功能,订票功能及退票功能。系统利用计算机和数据库的高效率大大减轻了学校票点工作人员的劳动强度, 提高了各部门的工作效率。
1.2 业务流程分析:
(一)、描述系统的业务流程:
本系统共有两种用户, 根据用户权限的不同而实现不同的功能。
操作员的权限最大,他进入系统必须先登录。操作员可以添加、修改、删除某车票的相关信息,可以修改自己的个人信息;查询、删除学生的订票情况,确认学生是否已付款取票等。
学生可以按目的地的车次对车票信息进行查询,可以订票,订票时须录入自己的信息及所选择的车次,系统将检查该车次票数是否已订完或不足,若已订完或不足则提示错误信息并返回到订票界面,订票成功后将生成订票单。学生还可以对自己所订的票券即订票单进行查询,以及查询哪一车次哪天还剩余多少张票。用户付款和取票可在学校票点完成。
(二)、初步业务流程图:
1.3 信息需求分析
1.3.1 资料收集
1.3.2 事项分析:
在本火车票订票系统中,各资料的基本数据项列举如下:
学生资料:学号,姓名,密码,所在学院,专业,班级,电话,目的城市
车票基本信息:车次号,出发站,开车时间,到达站,到达时间,车票种类,余票数
车次详细信息:ID号,车次号,途径站,票价,
订票单信息:订单号,订票人学号,订单时间,付款取票与否
订票具体信息:ID号,订单号,所得车次号,目的城市,订票数,总票价,取票时间
订票点信息:票点号,票点主任的员工号,联系电话,所在校区
操作员资料:员工号,票点号,密码,姓名,性别,电话
1.4 功能需求分析:
(一)、完善业务流程图:
(二)、功能层次图:
本系统共有两种用户, 根据用户权限的不同而实现不同的功能,如操作员查询、添加、修改、删除某火车相关信息及查询、修改自己的个人信息的功能。学生对车票信息、、哪一车次哪天还剩余多少张票和订票功能以及对自己所订票券的查询功能、退票功能。
2. (数据库)概念(模型)设计
2.1构思ERD的四条原则及根据这些原则相应得出的实体、联系及其属性:
① 原则1 (确定实体):能独立存在的事物,例如人、物、事、地、团体、机构、活动、事项等等,在其有多个由基本项描述的特性需要关注时,就应把它作为实体。
在本系统中,实体主要有学生、操作员、车票信息、车票详细信息表、订票单,订票详细信息表,订票点。
②原则2 (确定联系):两个或多个实体间的关联与结合,如主管,从属,组成,占有,作用,配合,协同等等,当需要予以关注时,应作为联系。实体间的联系可分为一对一、一对多、多对多等三类,在确定联系时还要确定其类型。
在本系统中,学生、车票信息、订票单和订票详细信息表之间存在“订购”的联系,一个车票信息可以被多个学生购买,而一个学生只可以购买多个车次所属的一到两张车票,它们之间的联系是一对多的“购买”联系,同时一次登录无论订多少车次只生成一张订票单。订票点和操作员之间存在“隶属”的联系,它们之间的联系是一对多的“隶属”联系;车票信息和车票详细信息表之间存在“包含”与被包含的关系;订票单和订票详细信息表之间也存在“包含”与被包含的关系。
③原则3 (确定属性):实体的属性是实体的本质特征。实体应有标识属性(能把不同个体区分开来的属性组),并指定其中一个作为主标识。联系的属性是联系的结果或状态。
从这条原则可得到实体和联系的属性如下:
学生(学号,姓名,密码,所在学院,专业,班级,电话,目的城市)
车票基本信息(车次号,出发站,开车时间,到达站,到达时间,车票种类,余票数)
车次详细信息(ID号,车次号,途径站,票价)
订票单信息(订单号,订票人学号,订单时间,付款取票与否)
订票具体信息(ID号,订单号,所得车次号,目的城市,订票数,总票价,取票时间)
订票点(票点号,票点主任的员工号,所在校区,电话)
操作员(员工号,票点号,密码,姓名,性别,电话)
④原则4(一事一地):信息分析中得到的基本项要在且仅在实体联系图中的一个地方作为属性出现。
根据以上的分析,可以画出本系统的原始ERD的基本结构。如
2.2、系统具体E-R图:
3. (数据库)逻辑(模型)设计
3.1 一般逻辑模型设计:
(一)、由ERD导出一般关系模型的四条原则:
原则1(实体转换为关系模式):ERD中每个独立的实体转换为一个关系模式,实体的属性组成关系的属性,实体的主标识转换成关系的主码。
原则2(从实体及其主从联系转换为关系模式):ERD中一个从实体及其主从联系转换为一个关系,从实体的属性及其主实体关系的属性组成的属性,其主实体关系的主码,在主从关系联系为一对多联系时还要加上可把同一主实体个体所对应的从实体个体区分开来的,从实体的一组属性,作为该关系的主码。对子类实体可作类似一对一联系的从实体的转换。
原则3(一对多联系在关系模式中的表示):ERD中的一个一对多联系通过在其“多”实体关系上增加“1”实体关系的主码(作为外码)和联系本身的属性来表示。
原则4(多对多联系转换为关系):ERD中的一个多对多联系转换为一个关系,其被联系实体关系的主码和该联系本身的属性一起组成的属性,被联系关系的主码组成该关系的复合主码。
(二)、数据库初步构思的关系框架:
通过ERD转换为一般关系模型四条原则分析,得到须在数据库中进行存储的一般关系模型如下(带下划线的为主码,带#的为外键):
学生(学号,姓名,密码,所在学院,专业,班级,电话,目的城市)
车票基本信息(车次号,出发站,开车时间,到达站,到达时间,车票种类,余票数)
车次详细信息(ID号,车次号#,途径站,票价)
订票单信息(订单号,订票人学号#,订单时间,付款取票与否)
订票具体信息(ID号,订单号#,所得车次号#,目的城市,订票数,总票价,取票时间)
订票点(票点号,票点主任的员工号#,所在校区)
操作员(员工号,密码,姓名,性别,电话)
3.2 具体逻辑模型设计:
(1)、Student表:用来保存学生信息:
项名 类型 长度 小数位 值域 主键 外键 空键
学号 字符 12 是 非空
姓名 字符 20 非空
密码 字符 12 非空
学院 字符 40 非空
专业 字符 30 非空
班级 数据 4 0 >0 非空
电话 字符 12 非空
目的城市 字符 30 非空
(2)、Ticket表:用来保存车票信息表
项名 类型 长度 小数位 值域 主键 外键 空键
车次号 字符 20 是 非空
出发站 字符 30 非空
开车时间 日期 8 非空
到达站 字符 30 非空
到达时间 日期 8 非空
车票种类 字符 20 非空
余票数 数据 8 0 >0 非空
(3)、Citysite表:用来保存车票详细信息表:
项名 类型 长度 小数位 值域 主键 外键 空键
ID号 整数,自动编号 8 是 非空
车次号 字符 20 是 非空
途径城市 字符 30 非空
票价 decimal 非空
(4)、Ticketsite表:用来保存订票点表:
项名 类型 长度 小数位 值域 主键 外键 空键
票点号 整数,自动编号 8 0 是 非空
票点主任员工号 整数,自动编号 8 0 是 非空
联系电话 字符 12 非空
所在校区 字符 40 非空
(5)、Admin表:用来保存操作员表:
项名 类型 长度 小数位 值域 主键 外键 空键
员工号 整数,自动编号 8 0 是 非空
用户名 字符 20 非空
密码 字符 12 非空
姓名 字符 20 非空
性别 字符 4 非空
电话 字符 12 非空
(6)、Book表:用来保存订单表:
项名 类型 长度 小数位 值域 主键 外键 空键
订单号 整数,自动编号 8 0 是 非空
学号 字符 是 非空
订单时间 字符 非空
付款取票与否 整数 2 0 非空
(7)、Ticket表:用来保存取票单表:
项名 类型 长度 小数位 值域 主键 外键 空键
ID号 整数,自动编号 8 0 是 非空
取票号 字符 8 0 是 非空
车次号 字符 是 非空
目的城市 字符 非空
订票数 数据 8 0 >0 非空
总票价 Decimal 非空
取票时间 日期 8 非空
4. 数据库物理设计与数据库保护设计
根据表的结构关系,本系统采用SQL Server 2000数据库。SQL Server 2000是微软公司关系型数据库产品,它是在由MS SQL Server 7.0建立的坚固基础之上产生的。客户的需求极大的推动了该产的革新,SQL Server2000在易用性、可缩放性和可靠性,以及数据仓库等诸多方面有了很大的增强。这使得SQL Server 2000在很多数据库产品发展最快的应用领域(如电子商务、移动计算、分支自动化、商业级应用和数据交换中心等)中成为领先者
在数据库中创建表的同时须创建相关的索引。索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。本数据库表较为简单,且每个表中定义主键约束或者唯一性键约束,已经间接创建了索引,故无需再创建索引。
5. 处理功能设计
5.1 主控模块设计:
(1)、登录系统模块:
在登录窗体界面中,你可以输入代码和密码,选择你的身份(操作员或系统管理员),确认后就可进入主界面窗体。如果你是学生,且还没注册,可以在此窗体界面上点击“注册”,在注册界面输入所要求的项,确定后重新返回登录界面,用你刚注册的账号登录进入主界面。
在主界面中包含上述模块图的几部分,根据身份,即是用户或者管理员,对应权限不同,分为不同的主界面,即用户主界面和管理员主界面。
(2)、系统设置模块图:
用户:在此模块用户可以查询、修改自身注册信息以及退出登录,退出系统后将返回登录界面。
管理员模块:在此模块管理员除了拥有用户的各项设置外还可以注册新的管理员,但为了安全起见,此功能只有当登录人是票点主任时才可执行。
5.2 子模块设计:
5.2.1、管理员模块
1、车票信息管理模块:在此模块,管理员可以执行车票信息录入、查询、删除和修改功能,不过删除和修改功能须当该车次没有被预订的情况下才可执行。
2、订票管理模块:在此模块,管理员可以查询所有订单情况、已付款取票和未付款取票的订单情况,还可以按学号查询某学生的订票情况以及各种统计信息,并在学生来付款取票时执行“付款”操作。另外还可以在订单已付款或学生取消订单时删除订单。
5.2.2、用户模块:
1、订票管理模块:在此模块,用户可以查询车票信息和自身订票情况。查询车票情况分为按车次、按目的地、按起始站—目的站查询,当查询到自身所想要的车票时即可订票,但注意预定票的目的地须与学生家乡所在城市相符,否则系统不允许订票;查询自身订票情况包括订单信息及金额统计,还须注意订票信息上要求的取票期限,订票人须在规定期限内去所在校区的票点付款取票,逾期票点工作人员将不予处理。
2、用户小贴士模块:在这里,用户将了解本订票系统的订票流程及相关规定及用户订票后付款取票地点的信息等。
6. 数据库应用系统的实现
6.1 数据库及其表结构的建立:
利用SQLServer企业管理器创建数据库Tickets,然后创建表:
1、学生表Book
create table Student
(Sno varchar(12) primary key, Sname varchar(20) not null,
Ssex varchar(4) not null, Spw varchar(12) not null, //密码
Sadm varchar(40) not null, //学院
Sdept varchar(30) not null, Sclass numeric(4) not null,
Stel varchar(12) not null, //电话
Semail varchar(50) not null, Shcity varchar(30) not null //所在地
);
2、车票信息表Ticket
create table Ticket
(Tno varchar(20) primary key, //车次号
Startcity varchar(30) not null, Starttime varchar(20) not null,
Endcity varchar(100) not null, Endtime varchar(20) not null,
Ttype varchar(20) CHECK (Ttype IN('硬座','软座','硬卧','软卧')),
Tickets int not null //票数
);
3、车次站次信息表Citysite
create table Citysite
(Cityno numeric(8) identity(1,1), //票点号
Tno varchar(20), City varchar(100),
Tprice decimal not null, //票价
primary key (Cityno,Tno),
foreign key (Tno) references Ticket(Tno) on delete cascade
)
4、订票单表Book
create table Book
(Bno numeric(8) identity(1,1) primary key, Sno varchar(12),
Maketime datetime not null, judge int,
foreign key (Sno) references Student(Sno),);
5、订票详细信息表Bookno
create table Bookno
(ID numeric(8) identity(1,1) primary key,
Bno numeric(8), Tno varchar(20), City varchar(100),
Booktime varchar(20) not null, Ticketnums int not null,
Price decimal not null, //票价
Pickdate datetime not null, foreign key (Tno) references Ticket(Tno),
foreign key (Bno) references Book(Bno));
6、操作员表Operater
create table Operater
(Adname varchar(20) primary key, //登录用户名
Adpw varchar(12) not null, //登录密码
Opname varchar(20) not null, //员工真实姓名
Opsex varchar(4) not null, Optel varchar(12) not null,
Opemail varchar(50) not null);
7、订票点表Ticketsite
create table Ticketsite
(Siteno numeric(8) primary key identity, //票点号
Adname varchar(20), // 票点主任登录名
Sitetel varchar(12) not null, Siteaddr varchar(40),
foreign key (Adname) references Operater(Adname));
//为安全起见,学校各校区订票点内容的添加要以直接输入数据库的方式进行
insert into Ticketsite(Adname,Sitetel,Siteaddr) values('linyp','870432','龙洞校区行政楼205')
insert into Ticketsite(Adname,Sitetel,Siteaddr) values('admin','87084432','大学城校区E区205')
6.2 创建表的相关视图:
1、创建V_Book视图,得到对于某种车票的订票人数和订票张数
create view V_Book(Tno,stu_no,sumticket)
as
select Tno,count(distinct Sno),sum(Ticketnums) from Bookno,Book
where Bookno.Bno=Book.Bno group by Tno
2、创建W_Book视图,得到对于所有订票学生的人数和订票总张数
create view W_Book(stu_nums,sumtickets)
as select count(distinct Sno),sum(Ticketnums) from Bookno,Book
where Bookno.Bno=Book.Bno
3、创建P_Book视图,得到对于已付款取票的人数和车票总张数
create view P_Book(cout_no,cout_nums)
as select count(distinct Sno),sum(Ticketnums) from Bookno,Book
where Bookno.Bno=Book.Bno and judge=1
4、创建M_Book视图, 得到对于某一订票的总金额
create view M_Book(Allprice)
as select sum(Tprice*Ticketnums) from Book,Bookno,Citysite
where Bookno.Bno=Book.Bno and Bookno.Tno=Citysite.Tno and Bookno.City=Citysite.City
6.3 各表关系图,
易知表Ticket与表Citysite之间是父表与子表的关系:
表Book与表Bookno之间也是父表与子表的关系:
它们之间都是父表对子表的一对多的关系。
根据表之间的结构关系图,可以得出各表的完整性约束条件如下图:
表名 主键列名 外键
外键列名 参照表
Student Sno 无
Ticket Tno 无
Citysite Cityno Tno Ticket
Book Bno Sno Student
Bookno ID Bno,Tno Book,Ticket
Operater Adname 无
Ticketsite Siteno Adname Operater
6.4 数据输入:利用系统录入数据,如下图为各表内容:
6.5 模块实现:
本次系统设计我前台采用JSP技术,后台采用SQL Server 2000,操作系统采用Windows XP。
JSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
㈣ 我正在学习sql server 2005,我想找点练习题。
我这倒是有两个;练习 但是是word文档 不好复制进来 只能复制点笔试题 要机试题请发给邮件给我 我给你传过来 邮件中说明 是目的 不然我不知道会当垃圾邮件处理的 我的邮箱是 [email protected]
针对以下题目请选择正确答案(每道题目有一个或多个正确的答案)。针对每一道题目,所有答案都选对,则该题得分,否则不得分。
1. 数据库设计的最终目标不包括()。 (选择两项)BD
A. 高效
B. 满足范式要求
C. 安全
D. 表现设计者的技术实力
E. 易用
F. 便于将来扩展功能和容量
2. 有关数据冗余说法错误的是()。(选择一项)C
A. 数据库中,数据存在副本的现象,就是数据冗余。
B. 通过分类存储,可以有效减少数据冗余,但是会增加数据查找的复杂性。
C. 在数据库设计阶段,一定要尽最大可能避免数据冗余,最好做到无数据冗余。
D. 数据冗余通常是由于数据库设计引起的。
3. 用于表示数据库实体之间的关系图是()。A
A. 实体关系图
B. 数据模型图
C. 实体分类图
D. 以上都不是
4. 假定有一个用户表,表中包含字段:userid (int)、username (varchar)、 password(varchar)等,该表需要设置主键,以下说法正确的是()。(选择两项)AB
A. 如果不能有同时重复的username和password,那么username和password可以组合在一起作为主键。
B. 此表设计主键时,根据选择主键的最小性原则,最好采用userid作为主键。
C. 此表设计主键时,根据选择主键的最小性原则,最好采用username和password作为组合键。
D. 如果采用userid作为主键,那么在userid列输入的数值,允许为空。
5. 语句 alter table userinfo add constraint uq_userid unique(userid)执行成功后,为userinfo表的()字段添加了()约束。B
A. userid 主键
B. userid 唯一
C. uq_userid 外键
D. uq_userid 检查
6. 运行如下T-SQL,结果返回包含()的记录集。A
create table scores
(
scoreid int identity(1,2),
score numeric(4,2) not null,
courseid int
)
insert int scores values(90.5,null);
insert into scores values(78.234,2);
select * from scores;
A. 1 90.50 NULL
3 78.23 2
B. 1 78.23 2
C. 1 90.50
D. 1 90.50
2 78.23 2
7. 关于子查询,以下说法正确的是()。(选择两项)AC
A. 一般来说,表连接都可以用子查询替换。
B. 一般来说,子查询都可以用表连接替换。
C. 相对于表连接,子查询适合于作为查询的筛选条件。
D. 相对于表连接,子查询适合于查看多表的数据。
8. 创建存储过程如下:
create procere scoreproc
@scoreid int,@score numeric(4,2) output
as
select @score = score from scores where scoreid=@scoreid
正确的调用是:C
A. exec scoreproc 1,@myscore output
print @myscore
B. exec scoreproc @id = 1,@myscore output
print @myscore
C. declare @myscore numeric(4,2)
exec scoreproc 1,@myscore output
print @myscore
D. declare @myscore numeric(4,2)
exec scoreproc @id = 1,@myscore output
print @myscore
9. 假设需要设计一张表,记录各个作者着作的所有图书信息,表的结构如下:作者(作者名称,图书1,版本1,书价1,图书二,版本2,书价2,…),该表最多符合第()范式。A
A. 一
B. 二
C. 三
D. 不符合任何范式
10. 一个学生只能就读于一个班级,而一个班级可以同时容纳多个学生,学生与班级之间是()的关系。C
A. 一对一
B. 一对多
C. 多对一
D. 多对多
11. E-R图中,关系集用下面()来表示。B
A. 矩形
B. 椭圆形
C. 菱形
D. 圆形
12. 有如下表结构,#号打头字段代表主键或组合主键,一份订单可以订购多种产品。
产品:#产品编号,产品名称,产品价格;
订单:#订单编号,#产品编号,订购日期,订购数量;(订单编号与产品编号是组合主键)
该表最高符合第()范式。B
A. 一
B. 二
C. 三
D. 未规范化的
13. 有如下表结构,#号打头字段代表主键或组合主键,一份订单可以订购多种产品。
产品:#产品编号,产品名称,产品价格;
订单:#订单编号,总价,订购日期;
订单子项: #子项编号,订单编号,产品编号,订购数量;
该表最高符合第()范式。C
A. 一
B. 二
C. 三
D. 未规范化的
14. 创建sql语句如下:
create table userInfo
(
userId int identity(-1,1), 第1行
userName nvarchar(20) not null, 第2行
cardNO char not null, 第3行
age smallint(2), 第4行
address ntext(300) 第5行
)
执行时,会在第()行出现错误。(选择两项)DE
A. 1
B. 2
C. 3
D. 4
E. 5
15. 以下关于规范设计的描述正确的是()。(选择两项)AD
A. 规范设计的主要目的是消除数据冗余。
B. 规范设计往往会增加数据库的性能。
C. 设计数据库时,规范化程度越高越好。
D. 在规范化数据库时,易于维护数据库的完整性。
16. 关于存储过程,以下说法正确的是()。(选择一项)A
A. 不能在存储过程中使用CREATE VIEW命令。
B. T-SQL批代码的执行速度要快于存储过程。
C. 存储过程必须带有参数。
D. 存储过程不能返回结果集。
17. 已知有scores表,scoreid为主键,现在表中共有10条记录,其中一条scoreid=21。
创建视图:
create view view_scores
as
select * from scores
执行如下命令:
delete from view_scores where (scoreid = 21)
再执行如下命令:
select * from scores
select * from view_scores
假定上述命令全部执行成功,将各自返回()()行记录。D
A. 10,10
B. 10,9
C. 9,10
D. 9,9
18. 设计用户表时,身份证号为固定18位长,对该字段最好采用()数据类型。(选择一项)B
A. int
B. char
C. varchar
D. text
19. 授予用户someone对scores表的一些权限,正确的授权语句是()。(选择一项)C
A. grant insert , update to talbe scores on someone
B. grant insert and update to table scores on someone
C. grant insert , update on scores to someone
D. grant insert and update on scores to someone
20. 建立如下数据库表:
create talbe Department(
departID int not null primary key,
deptName varchar(20) not null
)
create table Employee(
employeeID int not null,
deptID int not null,
name varchar(20) not null
)
要想保证Employee表中每一个雇员(employee)是唯一的,且只能属于在Department表中已经存在的部门,最有的做法是()。(选择一项)B
A. 把employeeID和deptID设为组合主键。
B. 把employeeID设为主键,同时在deptID列上创建一个外键约束。
C. 把employeeID设为主键,同时在deptID列上创建一个检查约束。
D. 在deptID列上创建一个唯一约束,同时在deptID列上创建一个外键约束。
21. 建立一张员工表,当向表中插入数据时,若不提供入职时间,就把系统当前时间作为员工入职时间插入数据库,以下说法正确的是()。(选择一项)D
A. 约束不能使用各种函数,所以无法实现要求的功能。
B. 可以使用CHECK约束实现,默认值采用日期函数getDate()。
C. 入职时间必须设为日期类型。
D. 可以使用DEFAULT约束实现,默认值采用日期函数getDate()。
22. 为了加快对某表查询的速度,应对此表建立()。(选择一项)D
A. 约束
B. 存储过程
C. 规则
D. 索引
23. 假设有表student(学生)的设计如下:
id () 标识列
name () 学生姓名
address () 学生地址
department () 所属院系
departmentHead () 学院主管
该表最高满足()范式。(选择一项)B
A. 一
B. 二
C. 三
D. 不满足任何范式
24. 为数据库中一个或者多个表中的数据提供另外一种查看方式的逻辑表被称为()。(选择一项)C
A. 存储过程
B. 数据库关系图
C. 视图
D. 表
25. 要建立一个教师表,包含姓名、职称、级别等字段。若插入数据时,级别字段如果不输入,缺省值为“讲师”,最合适的实现方式是()。A
A. 为“级别”字段建立default约束。
B. 为“级别”字段建立check约束。
C. 为教师表数据输入编写一个存储过程进行控制。
26. 现有订单表orders,包含数据如下表。若查询既订购了产品p01,又订购了产品p02的顾客编号,可以执行以下()sql语句。(选择两项)CD
A. select distinct (cid) from orders ol where ol.pid in ('p01','p02')
B. select distinct (cid) from orders ol where ol.pid = 'p01' and ol.pid = 'p02'
C. select distinct (o1.cid) from orders o1,orders o2 where o1.pid='p01' and o2.pid='p02' and o2.cid = o1.cid
D. select distinct(cid) from orders where pid = 'p01' and cid in(select cid from orders where pid='p02')
27. 关于聚集索引,以下()说法是错误的。(选择两项)CD
A. 一个表最多只能创建一个聚集索引。
B. 聚集索引比非聚集索引有更快的访问速度。
C. 主键一定是聚集索引。
D. 创建了聚集索引的列不允许有重复值。
28. 关于视图,以下()说法是错误的。(选择一项)C
A. 使用视图,可以简化数据的使用。
B. 使用视图,可以保护敏感数据。
C. 视图是一种虚拟表,视图中的数据只能来源于物理数据表,不能来源于其他视图。
D. 视图中指存储了查询语句,并不包含任何数据。
29. 常用的存储过程不包括()。(选择一项)D
A. sp_tables
B. sp_columns
C. sp_stored_proceres
D. sp_renametable
30. 对事务的描述错误的是()。(选择2项)BD
A. 一个事务中的所有命令作为一个整体提交或者回滚。
B. 如果两个并发事务要同时修改一个表,可能产生死锁。
C. SQL Server默认将每条单独的T-SQL语句视为一个事务。
D. 事务必须使用begin transaction来明确制定事务的开始。
31. 分数表scores设计如下:
courseID(课程编号)
studentID(学生编号)
score(分数)
另有一个学生信息表student,包含studentID,sname(学生姓名)。
已知并非所有学生都参加了courseID为0001的考试,现在查询所有参加0001号课程考试及格学生的学生姓名,下面正确的是()。(选择一项)A
A. select sname from student where studentID in (select studentID from scores where courseID = 0001 and score>=60)
B. select sname from student where studentID = (select studentID from scores where courseID = 0001 and score>=60)
C. select sname from student where studentID not in (select studentID from scores where courseID = 0001 and score<=60)
D. select sname from student where studentID exists (select studentID from scores where courseID = 0001 and score>=60)
32. 在()的列上更适合创建索引。(选择两项)AD
A. 需要对数据进行排序
B. 具有默认值
C. 频繁更改
D. 频繁搜索
33. SQL Server数据库有2种登录认证方式。其中在()方式下,需要客户端应用程序连接时提供登录时需要用户标识和密码。C
A. Windows身份认证。
B. 以超级用户身份登录。
C. SQL Server身份认证。
D. 以系统身份登录时。
34. SQL Server数据库中,下列不属于T-SQL事务管理语句的是()。(选择一项)B
A. BEGIN TRANSACTION;
B. END TRANSACTION;
C. COMMIT TRANSACTION;
D. ROLLBACK TRANSACTION;
35. 要建立一个约束,保证用户表(user)中年龄(age)必须在16岁以上,下面语句正确的是()。(选择一项)A
A. alter table user add constraint ck_age CHECK(age>16)
B. alter table user add constraint df_age DEFAULT(16) for age
C. alter table user add constraint uq_age UNIQUE(age>16)
D. alter table user add constraint df_age DEFAULT(16)
36. SQL Server数据库中,包含两个表:Order订单表,Item订单子项目表。当一个新订单被加入时,数据要分别保存到Order和Item表,要保证数据完整性,可以使用以下()语句。(选择一项)C
A. BEGIN TRASACTION
INSERT INTO Order VALUES(此处省略)
INSERT INTO Items VALUES(此处省略)
END TRASACTION
B. BEGIN TRASACTION
INSERT INTO Order VALUES(此处省略)
INSERT INTO Items VALUES(此处省略)
IF(@@Erro = 0)
COMMIT TRASACTION
ELSE
ROLLBACK TRASACTION
C. BEGIN TRASACTION
INSERT INTO Order VALUES(此处省略)
IF(@@Erro = 0)
INSERT INTO Items VALUES(此处省略)
IF(@@Erro = 0)
COMMIT TRASACTION
ELSE
ROLLBACK TRASACTION
ELSE
ROLLBACK TRASACTION
D. BEGIN TRASACTION
INSERT INTO Order VALUES(此处省略)
INSERT INTO Items VALUES(此处省略)
IF(@@Erro <> 0)
ROLLBACK TRASACTION
37. 现有一个学生信息表student,包含主键studentID(学生编号)。又有分数表scores,包含studentID(学生编号)、以及score(考试分数)。已知student表中共有50个学生,有45人参加了考试(分数存在scores表中),其中10人不及格。执行以下SQL语句:
select * from student where exists(select studentId form score where score<60)
可返回()条记录。(选择一项)A
A. 50
B. 45
C. 10
D. 0
38. create table student
(
id int identity(1,1),
name varchar(20)
)
alter table student add constraint uq_name unique(name)
insert into student values(null)
insert into student values(null)
insert into student values('jack')
insert into student values('jack')
依次执行以上SQL语句后,student表中存在()行记录。B
A. 1
B. 2
C. 3
D. 4
39. 已知employee表中具有默认约束df_email,删除该约束的语句为()。(选择一项)A
A. alter talbe employee drop constraint df_email
B. alter talbe employee remove constraint df_email
C. alter talbe employee delete constraint df_email
D. remove constraint df_email from talbe employee
40. 在employee表的firstname字段上建立的非聚集索引的物理效果是()。(选择一项)D
A. 所有的行按照firstname字段值升序排列并物理地存储在数据页中
B. 索引中的项按照索引键值的顺序存储,但表中信息的顺序保持不变。
C. 所有的行按照firstname字段值降序排列并物理地存储在数据页中
D. 所有的行被物理地存储在数据页上,并且根据firstname字段按照索引建立时指定的顺序排列
41. 创建存储过程的片断如下:创建成功后,以下()调用方式是正确的。(选择一项)B
create procere proc_score
@passed int = 60,
@count int output
as
select count(*) from scores where score < @passed
A. execute proc_score @count int output
B. declare @count int
execute proc_score 70,@count output
C. declare @count int output
execute proc_score 70,@count
D. execute proc_score 70,@count output
42. 现有学生表Students和用户表Users,两表中的数据如下:
执行sql语句:select * from Users union select * from Students。下列说法正确的是()。(选择一项)A
Users Students
userID(int) name (varchar) studentID(int) age(int)
1 Wen 1 80
2 Shu 2 75
3 Gao
4 Shui
A. 出现错误:name与age不是同一数据类型。
B. 正确执行,返回6行4 列。
C. 正确执行,返回6行2 列。
D. 正确执行,返回4行2列。
43. 假设有scores表的设计如下:
ID(编号,主键)
StudentID(学生编号)
CourseID(课程编号)
Score(分数)
现在要查询参加过至少两门课程考试的学生各门课程的平均成绩。以下SQL语句正确的是()。(选择一项)A
A. select StudentID,avg(score) from scores group by StudentID having count(studentID)>1
B. select StudentID,avg(score) from scores group by StudentID where count(studentID)>1
C. select StudentID,avg(score) from scores group by StudentID where count(studentID)>1 group by StudentID
D. select StudentID,avg(score) from scores having count(studentID)>1
44. 假设orders表中存在orderid等于1的纪录,执行下面T-SQL:
begin transaction
delete from orders where orderid = 1
if (@@error<>0)
rollback transaction
rollback transaction
以下说法正确的是()。(选择一项)B
A. 执行成功,orderid为1的记录被永久删除。
B. 执行成功,orders表没有任何变化。
C. 执行时出现错误。
D. 执行成功,但事务处理并没有结束。
45. 项目开发需要经过几个阶段,绘制数据库的E-R图应该在()阶段进行。(选择一项)B
A. 需求分析
B. 概要设计
C. 详细设计
D. 代码编写
46. 将E-R图转换为表的过程中,如果实体之间存在多对多的关系,通常的做法是()。(选择一项)B
A. 在两个实体间建立主外键关系。
B. 在两个实体间建立关联表,把一个多对多的关系分解成两个一对多的关系。
C. 在两个实体间建立关联表,把一个多对多的关系分解成两个一对一的关系。
D. 在两个实体间不建立任何关系。
47. 某个字段希望存放电话号码,该字段应选用()数据类型。
A. char(10)
B. text
C. varchar(13)
D. int
48. 运行以下语句得到的结果是()C
use javaWebDB
create table numbers
(
N1 INT,
N2 NUMERIC(5,0),
N3 NUMERIC(4,2),
)
INSERT numbers VALUES(100,100.5,10.5)
select * from numbers
A. 返回100,100,10.5的结果集
B. 返回100,100,10.50的结果集
C. 返回100,101,10.50的结果集
D. 语句无法全部成功执行
49. 数据库事务处理具有如下特征(),被简称为ACID。(选择四项)ACEF
A. 原子性
B. 安全性
C. 隔离性
D. 完整性
E. 持久性
F. 一致性
50. SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,CREATE、DROP、ALTER语句是实现哪种功能( )。C
A. 数据查询
B. 数据操纵
C. 数据定义
D. 数据控制