1、1,电子商务系统设计与实现,毛郁欣 浙江工商大学计算机与信息工程学院,2,课程的主要内容,第1章 概论 第2章 电子商务系统分析与设计基础 第3章 电子商务系统开发基础 第4章 电子商务系统规划 第5章 电子商务系统分析 第6章 电子商务系统设计 第7章 电子商务应用系统设计 第8章 数据库实现 第9章 电子商务网站开发技术 第10章 电子商务系统的开发模式 第11章 电子商务系统的测试与维护,3,第8章 数据库实现,8.1 桌面数据库的实现MS Access 2003 8.2 大型数据库的实现MS SQL Server 2005 8.3 SQL编程规范,4,8.1 桌面数据库的实现MS A
2、ccess 2003,8.1.1 Access 概述 Access使用标准的SQL(Structured Query Language,结构化查询语言)作为它的数据库语言,从而提供了强大的数据处理能力和通用性,使其成为一个功能强大而且易于使用的桌面关系型数据库管理系统和应用程序生成器。 一个Access数据库中可以包含表、查询、窗体、报表、宏、模块以及数据访问页。 不同于传统的桌面数据库(dbase、 FoxPro、Paradox), Access数据库使用单一的*.mdb文件管理所有的信息,这种针对数据库集成的最优化文件结构不仅包括数据本身,也包括了它的支持对象。,5,8.1.2 数据库和表
3、的创建,(1)ACCESS数据库的创建 (2)表的创建和使用,6,8.1.3 创建查询,(1)在设计视图中创建查询 (2)运行查询,7,8.2 大型数据库的实现MS SQL Server 2005,SQL SERVER 2005是微软公司开发的一个关系型数据库管理系统。和ACCESS相比,SQL SERVER具有更高的存储效率和安全性,和ORACLE相比,SQL SERVER具有更友好的操作界面、配置管理界面。在我国,SQL SERVER已广泛应用于众多行业和领域。 和SQL Server以前的版本相比,SQL Server 2005的新增功能主要表现在企业数据管理易管理性、可用性、可伸缩性和
4、 安全性。,8,SQL Server 2000主要组件介绍,服务管理器 SQL Server服务管理器负责启动、暂停和停止SQL Server的进程。若要启动SQL Server服务管理器,请选择“开始”“程序”“Microsoft SQL Server”“服务管理器”命令。 “SQL Server服务管理器”窗口:,9,SQL Server 2000主要组件介绍,企业管理器 企业管理器是SQL Server 2000中最重要的一个管理工具。 它以层叠形式显示出所有SQL Server对象,使用企业管理器可以完 成几乎所有的管理工作,主要包括: 注册和管理SQL Server服务器; 连接、启
5、动、暂停或停止SQL Server服务; 创建和管理数据库; 创建和管理各种数据库对象,包括表、视图、存储过程、触发器、角色、规则、默认值、用户自定义数据类型、用户自定义函数以及全文目录; 备份数据库和事务日志;数据库复制;设置任务调度; 让管理者进行警报设置;提供跨服务器的拖放操作; 管理用户账户;编写和执行Transact-SQL语句;管理和控制SQL Mail。,10,SQL Server 2000主要组件介绍,查询分析器 SQL Server 2000查询分析器是一种图形工具,它允许用户输 入和执行SQL语句,并返回语句的执行结果。可以进行以下操作。 在“查询”窗口中创建查询和其他SQ
6、L脚本,并针对SQL Server数据库来分析和执行它们,执行结果在结果窗格中以文本或表格形式显示, 利用模板功能,可以借助预定义脚本来快速创建数据库和各种数据库对象(如表、触发器和视图等)。 利用对象浏览器脚本功能,可以快速复制现有数据库对象。 利用对象浏览器过程在参数未知的情况下执行存储过程。 利用T-SQL调试程序调试存储过程。 调试查询性能问题,包括显示执行计划、显示服务器跟踪、显示客户统计和索引优化向导。 利用对象搜索功能在数据库内定位对象,或在对象浏览器查看和使用对象。 在“打开表”窗口中快速插入、更新或删除表中的记录行。,11,SQL Server 2000主要组件介绍,数据导入
7、导出工具 数据导入导出工具是一个向导程序,用于在不同的SQL Server服务器之间传递数据,也用于在SQL Server与其他数据库管理系统(如Access、FoxPro或Oracle)或其他数据格式(如电子表格或文本文件)之间交换数据。 服务器网络实用工具 服务器网络实用工具用于设置服务器支持的网络库及其参数,目的在于为客户端网络实用工具提供设置参数,使客户机能够顺利地连接到本服务器上。,12,SQL Server 2000主要组件介绍,客户端网络实用工具 SQL Server客户端网络实用工具是一个图形工具,它允许用户创建到指定服务器的网络协议连接并更改默认的网络协议,并用于显示当前系统
8、中安装的网络库的有关信息,还显示当前系统中安装的DB-Library版本,并为DB-Library选项设置默认值。 事件探查器 SQL事件探查器是一个图形工具,可以使系统管理员监视SQL Server中的事件,允许捕获有关每个事件的数据并将其保存到文件或SQL Server表中,供以后分析。,13,SQL Server 2000主要组件介绍,在IIS中配置SQL XML支持 SQL Server 2000的新特性之一是增加了对扩展标记语言XML的支持,可以利用HTTP协议以URL方式访问SQL Server数据库。 为了实现SQL Server 2000对XML语言的支持,必须在已有Web站点
9、中建立一个虚拟目录,或者在一个已有虚拟目录中建立一个子目录。 联机丛书 联机丛书包含了关于SQL Server 2000的使用说明,利用联机丛书的导航功能可以很方便地找到所需要的帮助信息。,14,8.2.1 实现数据库设计,设计数据库的过程实际上就是在数据库管理系统中设计数据库对象的过程。 在SQL SERVER中,常用的数据库对象主要有:数据库关系图、表、视图、同义词、存储过程、函数、触发器、程序集、类型、规则、默认值等。,15,8.2.2 创建和管理数据库,SQL Server 2005提供了两种类型的数据库: 系统数据库 用户数据库创建用户数据库,16,8.2.3 创建表,SQL SER
10、VER 2005的数据类型、字段属性和ACCESS中是有较大不同的,SQL SERVER 2005中的数据类型、字段属性要比ACCESS中的数据类型丰富得多。,17,8.2.4 创建视图,创建视图 修改视图 删除视图,18,使用企业管理器创建视图 方法要点:选择“操作”“新建视图”命令,打开视图设计器,然后添加表、视图或函数,指定要输出的列和搜索条件等。使用CREATE VIEW语句创建视图 语法格式:CREATE VIEW ( , .n ) WITH ENCRYPTION AS SELECT语句 WITH CHECK OPTION 2. 指定列别名 在下列情况下,才有必要在CREATE VI
11、EW语句中指定列名: 某个列是来自于一个算术表达式、内置函数或常量。 由于在SELECT语句中连接了多个表,致使多个列具有相同的名称。 要给某个列指定一个不同于基础表中的列名。例如,在基础表中列名用的是英文,在视图中则用中文指定列名。 列名也可以在SELECT语句中指定。如果不指定列名,则视图中的列将使用与SELECT语句中相同的名称。,19,8.2.5 创建索引,(1)为什么要用索引 (2)创建索引的指导原则 (3)在SQL Server Management Studio中创建索引,20,创建索引的注意事项: 只有表的所有者可以在同一个表中创建索引。 每个表中只能创建一个聚集索引。 每个表
12、可以创建的非聚集索引最多为249个,包括PRIMARY KEY约束或UNIQUE约束创建的索引在内。 包含索引的所有长度固定列的最大大小为900字节。例如,不可以在定义为char(300)、char(300)和char(301) 的三个列上创建单个索引,因为总宽度超过了900字节。 包含同一索引的列的最大数目为16。,21,8.2.6 创建存储过程,创建存储过程 执行存储过程 2. 使用CREATE PROCEDURE语句创建存储过程 语法格式: CREATE PROC EDURE procedure_name ; number parameter data_type VARYING = de
13、fault OUTPUT ,.n WITH RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION FOR REPLICATION AS sql_statement .n ,22,8.2.7 设计数据完整性,数据完整性是指数据的精确性和可靠性。设计数据完整性的目的是为了防止数据库中存在不符合语义的数据,防止错误信息的输入。 SQL SEVER提供了一些工具来帮助用户实现数据完整性,其中最主要的是:约束、规则、默认值、触发器。,23,(1)约束,约束定义关于列中允许值的规则,是强制完整性的标准机制。 SQL SERVER主要支持以下五类约束: NOT NU
14、LL 指定不接受 NULL 值的列; CHECK 约束对可以放入列中的值进行限制,以强制执行域的完整性 UNIQUE 约束在列集内强制执行值的唯一性。 PRIMARY KEY(主键) 约束标识列或列集,这些列或列集的值唯一标识表中的行。在一个表中,不能有两行包含相同的主键值。 FOREIGN KEY(外键) 约束标识表之间的关系。,24,(2)规则,规则是一个向后兼容的功能,用于执行一些与 CHECK 约束相同的功能。CHECK 约束是用来限制列值的首选标准方法。CHECK 约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个 CHECK 约束。CHECK 约束作为 CREATE TA
15、BLE 语句的一部分进行指定,而规则以单独的对象创建,然后绑定到列上。,25,(3)默认值,如果在插入行时没有指定列的值,那么默认值指定列中所使用的值。默认值可以是任何取值为常量的对象,例如:固定的某一个默认值、用SQL SERVER的内置函数计算得到的值或几个字段计算而得到的数学表达式。,26,1. 使用企业管理器创建默认值 方法要点:展开要在其中创建默认值对象的数据库,单击“默认”节点,然后选择“操作”“新建默认”命令。 2. 使用CREATE DEFAULT语句创建默认值 语法格式:CREATE DEFAULT default AS constant_expression,27,(4)触
16、发器,触发器是一类特殊的存储过程,被定义为在对表或视图发出UPDATE、INSERT或 DELETE语句时自动执行。触发器是功能强大的工具,它使每个站点可以在有数据修改时自动强制执行其业务规则。触发器可以扩展 SQL Server 约束、默认值和规则的完整性检查逻辑,但只要约束和默认值提供了全部所需的功能,就应使用约束和默认值。,28,1. 使用企业管理器创建触发器 方法要点:单击将在其上创建触发器的表,然后选择“操作”“所有任务”“管理触发器”命令。 2. 使用CREATE TRIGGER语句创建触发器 基本语法格式: CREATE TRIGGER trigger_name ON table
17、 | view WITH ENCRYPTION FOR INSERT , UPDATE , DELETE AS IF UPDATE( column_name ) AND | OR UPDATE( column_name ) .n sql_statement .n,29,8.3 SQL编程规范,每个程序员的编程水平和代码风格各不相同,如果不统一编程规范,其程序可读性将变差,这不仅给代码的理解带来障碍,还会极大增加维护阶段的工作量,同时不规范的代码、及程序中的垃圾代码不仅占用额外的空间,而且还常常影响程序的功能与性能,很可能给程序的测试、维护等造成不必要的麻烦。,30,8.3.1命名规范,数据库命
18、名:建议命名格式为项目英文名称(或项目英文名称 + Db)。如:AdventureWorks、AdventureWorksDb。 关系型数据仓库:建议命名格式为项目英文名称 + DW。如:AdventureWorksDW。 数据表;表名别名要简短,但意义要尽量明确。通常使用大写的表名作为别名,使用 AS 关键字指定表或字段的别名。如:Employee、Product。 数据视图:建议命名格式为v + 视图名称。如:vEmployee、vSalesPerson。 数据列:列名称命名采用英文单词或缩写,英文单词只来自于具体业务定义,尽量表达清楚含义。如:AddressID、PostalCode。
19、存储过程:命名能清晰简单的描述存储过程的功能,如:GetUser、AddUser。 主键、外键关系和索引 常用字段命名,31,8.3.2 SQL语法规范,大写所有的SQL 关键字,数据类型定义使用全部小写。 尽量避免在任何代码中使用 “SELECT *”,而应指明需要返回哪些字段。 在where语句中,要使用设定了索引的列。 在程序段中使用“;”作为 Transact-SQL 语句终止符。 尽量采用Unicode数据存储格式,提高可移植性和兼容性。使用nchar、nvarchar、ntext代替char、varchar、text。 如果字符具有明确的长度,使用nchar代替nvarchar;c
20、har 代替varchar。 在只有两个可能数值时,使用bit代替int或smallint。 在SQL Server 2005中,使用nvarchar(MAX)代替ntext;varchar(MAX)代替text;varbinary(MAX)代替image。 在特殊的数据表结构中可考虑使用xml数据类型。 在建立数据表时,尽量使用默认值代替NULL值。比如设置CreatedDate列默认值为GETDATE()。在可避免的情况下设置字段为不允许空。,32,8.3.2 SQL语法规范,确保允许用户可能需要的最大字符数,避免超出最大长度时出现字符丢失现象。对于字符型数据,建议采用2的n次方来定义数据
21、长度。 在SQL 代码中为字符常量使用单引号,避免使用双引号。 语句缩进 语句分割 关于类型转换 排序 Unicode字符串 在SQL代码快中尽量使用BEGIN.END 语句块,提高代码可阅读性。 关于“TRY块”的使用 在SQL Server 2005中加强了TOP的使用,尽量使用TOP(变量)来减少SQL拼串的使用。 关于TRANSACTION编写,33,8.3.3 SQL编程规范,如果要对数据修改、不能在记录集对象中进行,而应使用SQL语句进行修改。 有大量数据的表不能联接。 对多个记录的更新语句(update语句),应用WHERE语句的“IN”使SQL语句只运行一次。 动态游标比静态游
22、标更占用资源,所以对于只是读取数据的SQL语句(SELECT语句)应使用向前回滚游标来执行SQL语句。 在WHERE语句中,不能用IS NULLIS NOT NULL检索。因为如果用IS NULL及IS NOT NULL条件在存储大量数据的表中查询数据,即使建立了索引,数据库服务器也不能利用索引检索。 有大量数据存储的表中,不要使用TRIM、LTRIM、RTRIM等函数进行查询。因为即使建立了索引,数据库服务器也不能利用索引检索。,34,8.3.3 SQL编程规范,SELECT语句中,应尽量避免使用LEFT(AAA)、RIGHT(BBB)等函数。因为数据库服务器需要用大量的资源来处理函数,会导
23、致服务器的负荷会加重。而在应用程序中处理这些函数会比较好。 在针对SELECTUPDATEINSERTDELETE进行操作的数据中,存在单引号“”的情况下,应将单引号转义为“”。 SQL语句中不应该出现多余的空格。多余的空格会降低SQL执行的效率。 如果表中使用了复合索引(由多个字段组成的索引),那么在WHERE语句中使用字段的顺序要与建索引的字段顺序相同。 对于多个SQL语句对数据进行修改(INSERTUPDATEDELETE)的情况,应利用事务(Transaction)来保证数据的一致性。,35,8.3.3 SQL编程规范,因为在事务处理过程中,其他的操作要用到事务处理所涉及的表,就会需要等待,所以应尽可能缩短事务处理的时间。在事务处理的过程中,应避免出现与用户交互的界面。 使用Command对象或RecordSet对象等对象后,需要释放对象资源。 数据库连接必须断开。,