数据库系统
第十讲的IDEF1X图如何绘制要重点关注
第五周小结
2023-3-20~2023-3-26
第九讲–数据库应用程序开发
1.嵌入式SQL语言,将SQL语言嵌入到某一高级语言(宿主语言)中使用;例如,exec sql select sname,sage into :vsname,:vsage from student where sname=’张三’;(C语言为例,其中into后表示接收SQL语句检索结果的程序变量,由冒号引导)
2.在嵌入式SQL语句中可以出现宿主语句使用的变量,但需要特殊声明,例如:
Exec sql begin declare section;
char vsanme[10],specname[10]=’张三’;
Int vage;
Exec sql end declare section;
3.嵌入式SQL比交互式SQL更加灵活,只需要改变变量值,可以重复使用SQL语句,检索出不同的结果;
4.程序与数据库的连接和断开:
SQL标准中的语法:
exec sql connect to target-server as connect-name user user-name;/exec sql connect to default;
Exec sql disconnect connect-name;/exec sql disconnect current;
Oracle的语法:
exec sql connect :user_name identified by :user_pwd;
Exec sql commit release;/exec sql rollback release;
DB2 UDB的语法:
exec sql connect to mydb user :user_name using :user_pwd;
Exec sql connect reset;/exec sql disconnect current;
5.SQL语句执行过程中,必须提交、撤销语句才能确认其操作结果;
提交–exec sql commit work;
撤销–exec sql rollback work;
6.事务,一个存取或改变数据库内容的程序的一次执行/若干条SQL语句的一次执行为一次事务;事务结束前需要提交/撤销;
Begin Transaction
Exec sql…
…
Exec sql commit work|exec sql rollback work;
End Transaction
事务是DBMS提供的控制数据操作的手段,为一致性状态转换提供保证;
7.事务的特性–ACID
原子性A,保证事务的一组更新操作是原子不可分的,要么全做,要么全不做;
一致性C,事务的操作状态是正确的,符合一致性的操作规则,是进一步由隔离性保证的;
隔离性I,保证并发执行多个事务间互不影响;
持久性D,保证已提交的事务的影响是持久的,被撤销的事务的影响是可恢复的;
8.单行结果处理,由into子句将结果直接传送到宿主程序的变量中;
多行结果处理,使用游标,游标指向某检索记录集的指针,每次读一行、处理一行;读一行通过fetch…into语句实现;
9.游标要先定义,再打开,最后关闭;可以定义一次,打开(执行)多次,多次关闭;
Exec sql declare cur_student cursor for
Select sno,sname,sclass from student where sclass=’035101’;
Exec sql open cur_student;//打开,执行
Exec sql fetch cur_student into :vsno,::vsname,:vsclass;//读取
…
Exec sql close cur_student;//关闭
ODBC支持可滚动的游标,next向结束方向移动一条、prior向开始方向移动一条、first回到第一条、last移动到最后一条;
10.数据库记录的删除、删除、更新,一种是查找操作(与交互式DELETE语句相同),一种是定位操作;
11.状态,是嵌入式SQL语句的执行状态,状态捕获由三部分构成–设置SQL通信区(exec sql include sqlca;)、设置状态捕获语句(exec sql whenever sqlerror goto report_error;)、状态处理语句(report_error:exec sql rollback;)
12.SQLCA是已被声明过的具有C语言的结构形式的内存信息区,如下图所示:
13.状态捕获语句–exec sql whenever condition action;
其中condition包括sqlerror、not found、sqlwarning;
满足condition时执行Action,包括continue、goto 标号、stop、do函数/call函数(调用宿主程序的函数处理,返回后从引发condition的sql语句后继续执行)
其作用范围是从该状态捕获语句到程序编译顺序下的下一条相同条件的(sqlerror、not found、sqlwarning)状态捕获语句的上一条语句;
14.Sqlcode记录执行sql语句的状态,不同DBMS定义的sqlcode值的含义不同;
第十讲–数据建模(E-R模型)
1.一个个实体为实例,一类实体为实体集(简称实体);
2.属性,实体所具有的某方面的特性;
单一属性和复合属性(如家庭住址–省份、详细地址);
单值属性和多值属性(如一个人可能有多个电话号码);
可空值属性和非空值属性;
导出属性(由其他属性计算可得,例如出生年份计算出年龄);
3.关键字/码,实体中能够用其值唯一区分开的;
4.联系,一个实体的实例与其他实体实例之间可能发生的联系;
参与发生联系的实体的数目,为联系的度/元(例如读者与图书之间有二元联系–借阅、零件A由零件B和零件C装配构成–一元联系);
5.二元联系
一对一联系,实体A的实例只能与实体B的一个实例发生联系,反之亦然;
一对多联系(1:m、m:1),实体A的实例能和实体B的多个实例发生联系,但实体B的实例只能与A的一个实例发生联系;
多对多联系(m:n)
6.联系的基数,实体实例间联系的数量,即一个实体的实例通过一个联系与另一个实体中相关联的实例的数目;
例如,书架参与存放图书联系的基数为(0…m),图书参与此联系的基数为(1…1);
7.完全参与联系,最小基数为1(1…m);部分参与联系,最小基数为0(0…m);
8.Chen方法
9.Crow’s Foot方法
实体–矩形框,实体名称在横线之上;
属性–实体框横线的下面;
关键字–属性下加下划线;
联系–菱形框/联系名表示
基数表示方法:
示例
10.IDEF1X(期末考试保留节目)
(1)独立实体与从属实体
独立实体,又称强实体,其实例都被唯一标识,不取决于它与其他实体的联系;(关键字都是其自身的属性)
从属实体,又称弱实体,其实例的唯一标识依赖于与其他实体的联系;(主关键字包含了外来属性的实体)
独立实体用直角方形框、主关键字没有外键;
从属实体用圆角方形框,主关键字有外键;
一个实体的主关键字可以有0个、若干个;
仅一部分/没有外来关键字属性作为一个实体的主关键字,则该实体为独立实体;
(2)关键字
关键字,能够唯一确定实体每个实例的属性或属性组;
关键字分为主关键字、次关键字;
(3)外来关键字,是其他实体的关键字;
(4)联系,实体之间的一种连接关系,有连接联系、分类联系、不确定性联系;
连接联系,又称父子联系/依存联系,可以分为标定联系、非标定联系:
① 标定联系,子实体的实例都是由于它与父实体的联系而确定的,父实体的主关键字是子实体主关键字的一部分;
② 非标定联系,子实体的实例能够被唯一标识,不依赖于其他实体的联系,父实体的主关键字不是子实体的主关键字;
非确定联系,实体间有多对多的联系:
① 分解为若干个一对多的联系表达;
② 引入相交实体/相关实体,分解为若干个一对多的联系表达;
③ 确定性联系通过属性继承实现实体间联系;非确定性联系通过引入相交实体实现实体间联系;
分类联系,一个实体实例由一个一般实体实例和多个分类实体实例构成:
① 一般实体是若干具体实体(分类实体)的类;
② 分类实体与一般实体具有相同的主关键字,不同的分类实体有各自不同的属性特征;
③ 具体化–子类(例如一个银行账号可以有存款账号、贷款账号,它们有不同的属性),强调同一实体不同实例间的差异属性;
④ 泛化–父类,强调不同实体间的相似属性;
⑤ 高层实体的属性被低层实体自动继承;
⑥ 完全分类联系与非完全分类联系(子类有没有全)
(5)IDEF1X图实例