《数据库原理》实验教学指导书实验一数据模型设计与实现撰写人:郭云飞湘潭大学信息工程学院二○一六年四月实验一数据模型设计与实现一.上机目的1.了解并掌握数据模型的设计。
2.了解并掌握Oracle中的用Create命令定义表的方法,以及表的完整性定义。
3.了解并掌握Oracle中的用Alter命令和Drop命令对表的修改和删除。
二.预备知识1.E-R图图例图例一(教材第5版)矩形,表示实体集菱形,表示联系集线段椭圆,表示属性下划线标识主键属性图例二(教材第6版)矩形,表示实体集菱形,表示联系集线段属性在实体矩形内列出下划线标识主键属性2.Oracle数据类型3.CREATE TABLE命令1)CREATE TABLE table_name( column_name type(size), column_name type(size), …);2)CREATE TABLE table_name [(column_name,…)] AS SELECT statement;新建一张表,用于保存查询结果。
4.完整性约束Oracle允许用户为表和列定义完整性约束来增强一定的规则。
可分为:表约束和属性约束1)NOT NULL约束NOT NULL约束保证属性值不能为NULL。
没有NOT NULL约束的属性,值可以为NULL。
2)UNIQUE约束指定一个属性或者属性的集合为唯一键。
在表中没有两行具有相同的值。
如果唯一键是基于单条记录的,NULL是允许的。
表约束命令格式:,[CONSTRAINT constraint_name] UNIQUE (Column, Column, …)属性约束命令格式:[CONSTRAINT constraint_name] UNIQUE3)主键约束(Primary Key Constraint)主键约束强制属性和属性集合的唯一性,并且用一个唯一索引来管理它。
每个表中只能用一个主键,这样可以通过主键来标识表中的每条记录。
NULL值不允许在主键属性出现。
表约束命令格式:,[CONSTRAINT constraint_name] PRIMARY KEY (Column, Column, …)属性约束命令格式:[CONSTRAINT constraint_name] PRIMARY KEY4)外键约束外键提供表内或表间的完整性规则。
外键必须依赖于一个primary或unique key。
表约束命令格式:,[CONSTRAINT constraint_name] FOREIGN KE Y (Column, Column, …) REFERENCE S table (column, column, …)属性约束命令格式:[CONSTRAINT constraint_name] FOREIGN KEY table (column)5)Check约束CHECK约束定义了每条记录必须满足的条件语法:[CONSTRAINT constraint_name] CHECK (condition)5.ALTER TABLE命令ALTER TABLE命令可用来修改数据表的定义。
6.DROP TABLE命令用DROP TABLE命令删除Oracle数据表的定义。
命令格式:DROP TABLE table_name [CASCADE CONSTRAINT];CASCADE CONSTRAINT选项说明了也把完整性约束一起删除。
注意:●D ROP TABLE也把数据表中的数据删除。
●数据表的VIEWS和SYNOMNYMS保留下来,但它们变成了不合法的。
●任何悬而未决的事务将被提交。
●只有数据表的生成者或DBA才有权删除它。
三.示例1.根据查询结果创建表CREATE TABLE DEPT1 ASSELECT DEPTNO,DNAME,LOC FROM DEPT WHERE 1=1;用DESCRIBE命令查看DEPT1表的结构。
输入命令:DESCRIBE DEPT1表结构显示如下:Name Null? TypeDEPTNO NOT NULL NUMBER(2)DNAME V ARCHAR2(14)LOC V ARCHAR2(13)2.创建表EMP1CREATE TABLE EMP1(EMPNO NUMBER(4) PRIMARY KEY,ENAME V ARCHAR2(10),JOB V ARCHAR2(10),MGR NUMBER(4),HIREDA TE DATE,SAL NUMBER(7,2),COMM NUMBER(7,2),DEPTNO NUMBER(2) ,CONSTRAINT fk_emp1 FOREIGN KEY (DEPTNO) REFERENCES DEPT, CONSTRAINT chk_sal CHECK( SAL > 0 ));其中fk_emp1与chk_sal是一个约束名。
用DESCRIBE命令查看EMP1表的结构。
输入命令:DESCRIBE EMP1表结构显示如下:Name Null? TypeEMPNO NOT NULL NUMBER(4)ENAME V ARCHAR2(10) JOB V ARCHAR2(10) MGR NUMBER(4)HIREDA TE DATESAL NUMBER(7,2)COMM NUMBER(7,2)DEPTNO NOT NULL NUMBER(2)3.给数据表EMP1增加一个属性ageALTER TABLE EMP1ADD (AGE NUMBER(2));输入命令:DESCRIBE EMP1表结构显示如下:Name Null? TypeEMPNO NOT NULL NUMBER(4)ENAME V ARCHAR2(10) JOB V ARCHAR2(10) MGR NUMBER(4)HIREDA TE DATESAL NUMBER(7,2)COMM NUMBER(7,2)DEPTNO NOT NULL NUMBER(2)AGE NUMBER(2)4.用ALTER的MODIFY关键字修改已存在的属性的定义如:把EMP1中ENAME长度改为12个字符ALTER TABLE EMP1MODIFY (ENAME V ARCHAR2(12));5.用ALTER的RENAME关键字对属性重命名如:把EMP1中HIREDATE重命名为gyrqALTER TABLE EMP1RENAME COLUMN HIREDA TE TO gyrq ;6.用ALTER的DROP命令删除一个属性ALTER TABLE EMP1DROP COLUMN JOB;或同时删除多个属性ALTER TABLE EMP1DROP (JOB, MGR);7.用ALTER的DROP关键字可以用来删除表的主键。
ALTER TABLE EMP1DROP PRIMARY KEY;8.用ALTER的ADD关键字给表添加主键。
ALTER TABLE DEPT1ADD PRIMARY KEY(deptno);9.用ALTER的DROP关键字删除外键约束。
ALTER TABLE EMP1DROP CONSTRAINT fk_emp1;10.用ALTER的ADD关键字给表添加外键。
ALTER TABLE EMP1ADD CONSTRAINT fk_emp2FOREIGN KEY(DEPTNO) REFERENCES DEPT1;11.用ALTER的ADD关键字给表添加检查约束条件ALTER TABLE EMP1ADD CONSTRAINT chk_age CHECK(AGE BETWEEN 18 AND 65);12.用ALTER的DROP关键字删除表检查约束条件ALTER TABLE EMP1ADD CONSTRAINT chk_sal;如果不知道约束的名字,可以执行如下命令:select table_name,constraint_name, search_condition from user_constraints;13.D ROPTABLE命令删除表DROP TABLE EMP1;四.实验内容1.创建教材中的大学数据库,E-R模型见教材。
(参考:/)2.修改大学数据库中的表∙因为教师有可能由于各种原因不再任课。
因此,在instructor中增加一个rk属性,其类型为char(1),取值1或0,分别表示任课或不任课,默认值为1。
∙在department中增加属性rs,表示该系任课教师人数。
∙学生状态,或在校学习(0),或毕业(1)、或结业(2)、或退学(3)等,在student中增加一个zt属性,其类型为char,长度为1。
取值0,1,2,3,默认值为0(在校学习)。
∙每一个开课在选课前都有人数限制,选课后有选课人数统计,在section中用属性rs表示。
∙将takes中grade由等级制改成百分制。
∙课程类型有公共基础课(1,2)与专业课,专业课有必修(3)与选修(4)。
课程在第几学期开设都有规定。
在course中增加两个属性,lx:用1、2、3、4表示课程类型;xq:用1-8与0表示学期,0表示该课程不再开设。
3.创建银行储蓄与借贷管理数据库bank。
(参考:/,教材第5版)①E-R模型先用Powerdesigner等工具画出该系统的E-R模型,如下:②关系模型根据E-R模型转换成关系数据模型(为方便,将属性名中的“-”(减号)改为下划线),如下:branch(branch_name, branch_city, assets)主关键字:branch_namecustome(customer_name, customer-street, customer_city)主关键字:customer_nameaccount(account_number, branch_name, balance)主关键字:account_number外部关键字:branch_nameloan(loan-number, branch_name, amount)主关键字:loan_number外部关键字:branch_namedepositor(customer_name, account_number)主关键字:customer_name, account_number外部关键字1:customer_name外部关键字2:account_numberborrower(customer_name, loan_number)主关键字:customer_name, loan_number外部关键字1:customer_name外部关键字2:loan_number③关系模型的说明④创建数据库用CREATE TABLE在Oracle中实现该模型。