数据库分析与设计.ppt
数据库分析与设计,王有天 湖北经济学院,2021/2/9,2,数据,电子商务系统软硬件环境,分布式软件系统(B/S;C/S. P2P),TCP/IP,HTTP(s);SMTP/POP3;FTP;.,商务系统B/S;C/S,现金流,物流,信息流,业务处理指令,往往体现为SQL的批处理。,数据库管理程序,数据,数据处理指令:比如SQL。,用户管理程序,权限管理程序,用户,用户,用户,用户,用户,用户,用户,用户,用户,用户,业务流程1,业务流程2,业务流程3,业务流程4,用户控制,业务经营,数据层,界面,业务支持,市场,业务控制,控制层,表现层,邮箱,域名,2021/2/9,3,数据层,数据是企业信息系统的核心。,2021/2/9,4,对数据的管理系统,数据库 DBMS DataBase Management System,2021/2/9,5,为什么要有DBMS,数据完整性 事务的处理 如:转账事务 相对独立的系统模块 数据与程序分开。 软件的相对独立研发 集成数据处理的机制。 故障恢复 Log 权限,2021/2/9,6,DBMS特点,封装 不能通过DBMS以外的渠道访问数据库。 否则破坏完整性、一致性。 支持事务处理 能够故障恢复 控制访问 并发操作,2021/2/9,7,DBMS的发展,图书馆/资料库 如果管理不善,就不能成为系统。 人 文件系统 没有封装;没有事务处理;没有故障恢复。 数据库,2021/2/9,8,DBMS的分类,网络型/层次型 关系型 扩展 面向对象 模糊数据 多媒体数据库 网络文件管理,2021/2/9,9,关系型数据库,数据存储在表中,2021/2/9,10,Entity Relation,学生1,账号1,张三,账号,姓名,2021/2/9,11,关系种类:,1:n n:m 学生和课程,2021/2/9,12,关系型数据库的优点,记录等长 检索快。 例如:总记录个数。 某个字段值,2021/2/9,13,基本词汇,表 字段 记录 字段 关键字段 记录 记录的字段值 关系 定义某个表中某字段的值取自另外一个表,2021/2/9,14,记录的增加删除更新,记录没有顺序。 查询语言可以按字段排序。 删除记录 取决于DBMS 一般作标记,重用空间。 可以压缩表。但DBMS一般不自动进行。 增加记录 删除记录或最后 更新记录 定位到记录字段,覆盖。,2021/2/9,15,约束和触发器,字段 取值范围 某个记录必须符合某个范畴。 更复杂的约束需要触发器。,2021/2/9,16,数据库中表和类的关系,表 固定字段,表示某一类对象。 每个记录相当于类的实例。 每个字段值相当于实例的属性或者与其他实例的关系。 非同类的数据存储在同一个表,并不适合。,2021/2/9,17,记录和语句的关系,每个记录相当于符合特定语法的语句。 表示一定的语义。 Null表示不知道 Null的运算,2021/2/9,18,关系型数据库的范式,第一范式: 字段的原子性。要么视为原子。要么应该再分。 否则不便查询。,2021/2/9,19,第二范式,非关键字段完全函数依赖于关键字段。 函数依赖 y=f(x); 不能说y=f(x)附近。,2021/2/9,20,不符合第二范式造成问题,假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分) 关键字为组合关键字(学号, 课程名称),因为存在如下决定关系: (学号, 课程名称) (姓名, 年龄, 成绩, 学分) 这个数据库表不满足第二范式,因为存在如下决定关系: (课程名称) (学分) (学号) (姓名, 年龄) 即存在组合关键字中的字段决定非关键字的情况。,2021/2/9,21,不符合第二范式造成问题,数据冗余: 同一门课程由n个学生选修,“学分”就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。 更新异常: 若调整了某门课程的学分,数据表中所有行的“学分”值都要更新,否则会出现同一门课程学分不同的情况。 插入异常: 假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有“学号”关键字,课程名称和学分也无法记录入数据库。 删除异常: 假设一批学生撤销某些课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。,2021/2/9,22,不符合第二范式造成问题,冗余 重复的数据 更新麻烦 更新不一致造成冲突 冗余的根源在于 非关键字段不是由关键字段完全决定。 部分就能决定,结果另外一部分关键字改变时,非关键字段重复。,2021/2/9,23,关系型数据库的范式,第三范式 非关键字段之间不存在传递依赖。 否则存在冗余。 冗余带来同样的问题。,2021/2/9,24,适当的冗余,适当的冗余 造成重复但可能提高性能。 如index是故意的冗余。 照顾语义。,2021/2/9,25,数据库设计的多样性,对同一件事情描述方法可以不同。 因此数据库的结构有所不同。 但这些数据库中的数据应该是等价的。 可以相互推导。,2021/2/9,26,关系型数据库的数据操作,DBMS完成。 RDBMS支持查询语言SQL SQL=Structured Query Language 是一个语言规范。DBMS一般支持该规范,并有自己的扩展。 查询和操作:增删改查,2021/2/9,27,SQL的组成(分类),DATABASE TABLE CREATE VIEW INDEX SQL DDL: ALTER DROP SQL QUERY:SELECT FROM INSERT SQL SQL DML:UPDATE DELETE GRANT SQL DCL:REVOKE,2021/2/9,28,增加记录,Insert Table1(Field1,) Values(,) Insert Table1(Field1,) Select ,2021/2/9,29,更新,Update Table1 Set Field1=, Field2= Where ,2021/2/9,30,删除,Delete Table1 Where,2021/2/9,31,Select, Where,筛选记录 Select Field1, Field4 from Table1 Where (Field1=张三 and Field2=2) or Field1=李四 筛选条件 Like Between And ,=,<,<=,=,2021/2/9,32,Join, On,竖着连接表,按一定条件 Table1 join Table2 on Table1.Field1=Table2.Field1 Left Join Right Join 对于连接的表可以进行查询(如选择),2021/2/9,33,Into,查询结果存储在表中 Select Table1.Field1, into NewTable1 From ,2021/2/9,34,Union,竖着合并表 Select Field1, From Table1 Where Union Select Field1, From Table2 Where,2021/2/9,35,交叉表查询,TRANSFORM Sum(销售收入) AS 销售收入之总计 SELECT 部门, 人员 FROM 销售 GROUP BY 部门, 人员 PIVOT 季度;,2021/2/9,36,as,字段别名和表别名 表别名允许给表另起一个名字,相当于将表复制一遍参加查询。 视为单独的表,临时。,2021/2/9,37,Group by,进行分组集合运算,2021/2/9,38,Having, Where,Where 决定哪些元组被选择参加运算,作用于关系中的元组 Having 决定哪些分组符合要求,作用于分组,2021/2/9,39,Order By,排序 Desc Asc,2021/2/9,40,In,Exists,SELECT FROM WHERE S#IN ( SELECT S# FROM Student WHERE Course = C1 );,2021/2/9,41,In, Exists,SELECT SN FROM S WHERE EXISTS ( SELECT * FROM SC WHERE S.S#=SC.S# AND C#=C1 );,2021/2/9,42,查询的图形化-QBE,2021/2/9,43,查询的图形化,2021/2/9,44,权限管理语言的图形化,2021/2/9,45,电子商务系统中对SQL的调用,DBMS可以批处理SQL语句。 电子商务系统调用SQL 效率更高 安全,保持数据完整性。 支持事务。,2021/2/9,46,事务处理,事务 一组数据操作,要么成功要么失败。 SQL BEGIN TRANSACTION COMMIT ROLLBACK,2021/2/9,47,事务特点,Atomicity 事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。 Consistency 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态 Isolation 一个事务的执行不能被其他事务干扰。并发执行的各个事务之间不能互相干扰。 Durability 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。,2021/2/9,48,故障恢复,出现异常。造成事务中断。比如断电。 此时数据可能不一致。 单独的数据库文件难于解决该问题。 Log 写入数据库文件前,先写日志。在日志中保留恢复信息。 在数据库文件写成功后,在日志中标记。 检查日志。没有成功的写入应该尝试再写或者放弃。,2021/2/9,49,日志格式,每条日志记录的内容 事务标识 操作类型(插入、删除或修改) 操作对象(记录ID、Block NO.) 更新前数据的旧值(对插入操作而言,此项为空值) 更新后数据的新值(对删除操作而言, 此项为空值),2021/2/9,50,故障恢复,系统重启时, 如果日志完整,向前继续执行事务 如果日志不完整,撤销该事务。,2021/2/9,51,数据库软件,一般是关系型的 文件型 Access 没有日志。 服务 Oracle Ms Sql Server MySQL,2021/2/9,52,数据库软件,这些软件都支持SQL,并扩展。 SQL Server下的T-SQL,2021/2/9,53,SQL Server简介,原来为另外一家公司产品,后被微软收购。最新版本2005。 支持.net。 可以定义类型 可以定义函数、存储过程、触发器等。 支持xml,2021/2/9,54,SQL Server安装,安装时会检查: 至少512M,建议1G内存。 安装在Windows Server 2003 需要Service pack较新版本 最好安装有.net,2021/2/9,55,SQL Server数据库文件,管理多个数据库 数据库文件 一个或多个文件组 每个文件组有一个或多个文件。 分布在多个磁盘上可以并行读取。 不放在压缩磁盘上。 日志,2021/2/9,56,连接,可以用客户端连接。比如: 刚才的Management Studio Access 理解为一种服务/客户端使用关系。 程序连接 比如:A中建立SqlConnection对象,指定数据库位置(地址)、用户名、密码、数据库,2021/2/9,57,管理,2021/2/9,58,Mgmt Studio: T-SQL,2021/2/9,59,Access+SQL Server,Access文件,SQL Server服务,Access程序,SQL Server Mgt. Studio,2021/2/9,60,Access + SQL Server,2021/2/9,61,新建,2021/2/9,62,浏览,2021/2/9,63,2021/2/9,64,2021/2/9,65,2021/2/9,66,2021/2/9,67,2021/2/9,68,2021/2/9,69,2021/2/9,70,2021/2/9,71,2021/2/9,72,2021/2/9,73,2021/2/9,74,Access + SQL Server 实际例子,2021/2/9,75,2021/2/9,76,T-SQL,除了标准SQL外,支持更多功能。 可以有变量、逻辑控制,因此可以编程。 SQL Server 2005支持在.net环境中编程,如类型、触发器等。,2021/2/9,77,T-SQL,2021/2/9,78,数据库空间,一般单独提供。 目前市场上提供的数据库空间有: MySQL MS Sql Server Oracle较少。 价格差不多。,2021/2/9,79,数据库的维护,备份 复制/分布 数据完整性 权限控制 安全性,2021/2/9,80,数据库的备份,用于在系统发生故障后还原和恢复数据。 对于例行的工作(例如,将数据库从一台服务器复制到另一台服务器、设置数据库镜像、政府机构文件归档和灾难恢复)也很有用。,2021/2/9,81,数据备份和差异备份,数据备份是指包含一个或多个数据文件的完整映像的任何备份。 数据备份会备份所有数据和足够的日志,以便恢复数据。可以对整个或部分数据库,或者一个或多个文件进行数据备份。 差异备份是基于之前进行的数据备份而言的。 它仅包含自数据备份之后更改的页面区。此数据备份称为“基准备份”或差异“基准”。如果存在相应的基准备份,则可以对整个或部分数据库,或者一个或多个文件执行差异备份。,2021/2/9,82,数据库的复制,复制是一组技术,它将数据和数据库对象从一个数据库复制和分发到另一个数据库,然后在数据库间进行同步,以维持一致性。 使用复制,可以在局域网和广域网、拨号连接、无线连接和 Internet 上将数据分发到不同位置以及分发给远程或移动用户。,2021/2/9,83,OLAP vs OLTP,OLTP=OnLine Transactions Processing 生产用 使用频率频繁 更新 OLAP=OnLine Analysis Processing 分析用 使用频率周期性 只读,2021/2/9,84,数据库设计文档,说清楚数据库各对象的语法和语义 包括表、约束等。,2021/2/9,85,数据库设计案例,网上书店,2021/2/9,86,作业,利用Access或SQL Server建立数据库。 建立本讲提到的账号、学生、课程三个表。建立它们之间的关系。 尝试各种查询操作。,