8、数据库设计、约束
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CISSST
2,使用序列对象的nextval和currval获取下一个值和当前值。第一次使用序列 对象,必须先访问nextval此时序列被初始化为起始值。以后每次调用 nextval都会生成一个新值。 【示例】使用序列生成主键列的值 3,删除序列 DROP SEQUENCE seq_name
CISSST
CISSST
源自文库
练习
1,建立一个“学生”表Student,它由学号Sno、姓名Sname、性别sex、年龄 age、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并 且姓名取值也唯一。 2,向Student表增加“入学时间”列,其数据类型为日期型。 3,建立一个“课程”表Course,由课程号Cno,课程名Cname,学分Credit组 成,其中Cno是主键。 4,建立一个“学生选课”表SC,它由学号Sno、课程号Cno,成绩Grade组成, 其中(Sno, Cno)是主键。 5,建立一个视图student_course_view,包括学生的学号、姓名、选课门数, 总分,平均成绩。
CISSST
2、PowerDesigner的使用 3、 Oracle数据的导入和导出 EXP.EXE可将数据导出到一个.dmp备份文件中; IMP.EXE用于从dmp备份文件恢复数据。 导出的命令格式: exp SYSTEM/PWD @[SID] file=....dmp owner=(user1,user2) 导入的命令格式: imp SYSTEM/PWD file=....dmp fromuser =(user1,user2) touser=(user3)
CISSST
四、序列
序列是数据库中的一种对象,它可以生成一系列递增(减)的不重复的整数值,通常使 用序列来生成数值类型主键列的值。 1,创建序列 CREATE SEQUENCE seq_name [ START WITH n] [ INCREMENT BY m] [ MAXVALUE max_n | NOMAXVALUE] [ MINVALUE min_n | NOMINVALUE] [ CYCLE | NOCYCLE] [ CACHE count | NOCACHE] seq_name 为序列名; n 为起始值,默认为1; m 为增量,默认为1; max_n 最大值;默认是NOMAXVALUE,即一直到达最大值10^27 min_n 最小值;默认是NOMINVALUE,那么会一直到达最小值-10^26 NOCYCLE 表示到达最大值或最小值后不循环 NOCACHE 不缓存任何整数;默认缓存20个数值
CISSST
一、创建表
1、创建表: CREATE TABLE tableName( colName colType [DEFAULT defaultExp CONSTRAINT constraintDef ] [,colName colType……] ) 说明:(1) CONSTRAINT关键字后跟对于该列的约束; (2) 表的命名规范:长度为1 到 30 个字符,包括字母、数字、#、$及 _ ;第一个字符必 须是字母;如果名称中含有空格,则必须使用双引号。 2、约束的种类: (1)主键约束:表中任一行在主键列的值都不能为空,主键列的值能唯一确定一条记录。 (2)外键约束:外键列的值要么为空,要么等于它引用的列的某个值。另外,外键列只能引用另 一个表中具有主键约束或唯一约束的列。 (3)唯一约束:该列的值要么为空,要么是一个唯一值; (4)检查约束:该列的值要么为空,要么符合一个表达式的限制; (5)非空约束:表中任一行在该列的值都不能为空。
CISSST
三、重命名和删除表
重命名表: RENAME tableName TO newName 截断表: TRUNCATE TABLE tableName 删除表中的所有记录,重置表的存储空间。TRUNCATE属于DDL语 句,执行速度快,但不能回滚,不会引起触发器动作。如果某条记录 被外键引用则TRUNCATE将会失败。 删除表: DROP TABLE tableName
五、视图
视图是一个或多个表上的预定义查询,被查询的表称为基表。视图并不存储数据, 视图的结构和数据是建立在对表的查询的基础上。从视图中检索信息和从表中 检索信息的方法完全相同。 1、创建视图: CREATE [ OR REPLACE] [ FORCE | NOFORCE] VIEW view_name [(aliasNameList)] AS sub_query [ WITH { CHECK OPTION | READ ONLY}] view_name 为视图名称; aliasNameList 视图中的列名列表,个数必须和子查询列数相同,该列表实际上是给子 查询中的每个列定义了别名; sub_query 子查询语句; FORCE 强制创建视图; WITH CHECK OPTION 如果通过视图插入的记录必须能被该视图检索出来; WITH READ ONLY 该视图是只读的,不能执行DML语句 【示例】创建只访问一个基表的简单视图(昂贵产品) 【示例】创建一个产品视图,包含产品编号、名称、类型编号、类型名称、价格。
Xi'an institute Service & Software Science Technology
课程名: Oracle SQL开发
数据库设计、约束 编写:司丙茂
© 2012 西安软件服务外包学院.All rights reserved.
CISSST
内容目录
一、创建表 二、修改表 三、重命名和删除表 四、序列 五、视图 六、数据库设计
CISSST
3.2 表级约束的语法: 主键约束:CONSTRAINTS pk_tbName_colName PRIMARY KEY(colName) 外键约束:CONSTRAINTS fk_tbName_colName FOREIGN KEY (colName) REFERENCES tbName (colName), 检查约束:CONSTRAINTS ck_tbName_colName CHECK( exp ) 唯一约束:CONSTRAINTS uq_tbName_colName UNIQUE(colName) 【示例】表级约束 注: ○非空约束只能定义在列级; ○联合主键只能使用表级约束; 4、列默认值:DEFAULT exp DEFAULT短语和CONSTRAINT短语的前后顺序不能颠倒
CISSST
六、数据库设计
1、第三范式 针对关系数据模型主要有六种范式:第一范式、第二范式、第三范式、BC范式、第 四范式和第五范式。 满足最低要求的叫第一范式,简称1NF。在第一范式基础上进一步满足更高要求的为 第二范式,简称2NF。其余依此类推。 范式可以避免数据冗余、减少数据库的存储空间、减轻维护数据完整性的麻烦。但 是对数据的检索操作可能变得较为麻烦,范式越高检索效率就会越差。 第一范式(1NF):数据库表的每一列都是不可分割的基本数据项。1NF是关系模式应 具备的最起码的条件,如果数据库设计不能满足第一范式,就不能称为关系型 数据库。 第二范式(2NF):数据库表首先满足第一范式,并且不存在非关键字段对任一候选 关键字段的部分函数依赖,即每个非主属性要完全函数依赖于候选键或者主 键。第二范式的作用是消除部分依赖,以减少数据冗余、插入异常、删除异常 和修改异常。 例如(学生选课表): 学生、课程、教师、 教材、教室、上课时间 第三范式(3NF):首先要满足第二范式,其次非主属性之间不存在函数依赖。即非 主属性对候选键或主键都不存在传递依赖。 例如(学生选课表): 学生、课程、教师、教师职称、教室、上课时间
CISSST
5、通过复制现有表来创建新表: CREATE TABLE tableName AS (子查询); 新表的结构和内容由子查询的返回结果决定。 【示例】复制现有表的结构和内容 特殊用法: CREATE TABLE tableName AS (SELECT * FROM otherTable WHERE 1=2) 子查询不会返回一条记录,此时只复制表结构,不复制内容。
CISSST
2、基于视图插入和更新记录: (1) 如果视图的子查询是从一个基表中检索数据,那么可以通过视图进行记 录的插入和更新。 ○插入时,记录是被插入到基表中了; ○更新时,只能更新视图中可以看到的记录; ○删除时,也只能删除视图中可以看到的记录; ○如果创建视图时带有WITH CHECK OPTION选项,则插入和更新时 必须保证该记录还能在视图中被看到。 (2) 如果视图的子查询是从多个基表中连接后进行检索,那么不建议使用视 图进行DML操作(原因:限制较多且容易出错)。 如果子查询中使用了聚合函数,此时不能执行DML操作了。 (3) 如果创建视图时使用了WITH READ ONLY 选项,那么这个视图就是只读 的。
CISSST
5,给列添加约束 (1) ALTER TABLE tableName ADD CONSTRAINTS consName [以下约束之一] PRIMARY KEY(columnName) CHECK (表达式) UNIQUE(columnName) FOREIGN KEY(columnName) REFERENCES otherTable(otherColumn) (2)对主键约束、检查约束、唯一约束、外键约束和非空约束,可以使用以下方式: ALTER TABLE tableName MODIFY columnName CONSTRAINT consName [以下约束 之一] PRIMARY KEY CHECK(表达式) UNIQUE REFERENCES otherTable(otherColumn) NOT NULL 6,删除约束 ALTER TABLE tableName DROP CONSTRAINT consName
CISSST 3,约束的定义,有两种方式: 列级约束:紧跟每列的定义,列级约束是列定义的一部分; 表级约束:所有列都定义完毕,后续的独立定义约束的语句,表级约束可针对某一列或多列; 3.1 列级约束的完整语法: CONSTRAINT constraintName [选择以下某种约束] 主键:PRIMARY KEY 外键:REFERENCES otherTableName(columnName) 唯一:UNIQUE 检查:CHECK (exp) 非空:NOT NULL (1)约束命名约定: pk_table_column fk_table_column uq_table_column ck_table_column nn_table_column (2)可以不指定约束名,此时数据库会自动生成一个约束名。 (3) 一个列可以有多个约束 【示例】列级约束
CISSST
二、修改表
1,添加列 ALTER TABLE tableName ADD columnName type [DEFAULT … CONSTRAINT …] 注:如果表中已经有了记录,那么新追加的列不能有NOT NULL约束。 2,修改列的数据类型 ALTER TABLE tableName MODIFY columnName newType 注:修改类型时,如果表中还没有记录或该列的所有值都为空,那么 可以将它修改为任意数据类型;如果已经有了数据,那么只能增大而 不能减小它的长度或精度,目标类型也必须是兼容的数据类型。 3,修改列的默认值 ALTER TABLE tableName MODIFY columnName DEFAULT … 4,删除列 ALTER TABLE tableName DROP COLUMN columnName