2.2.3 基本表管理
基本表是数据库中存储数据的基本单元,是对用户数据进行读和操纵的逻辑实体。表由列和行组成,每一行代表一个单独的记录。表中包含一组固定的列,表中的列描述该表所跟踪的实体的属性,每列都有一个名字及各自的特性。列的特性由两部分组成:数据类型(datatype)和长度(length)。DM系统具有SQL-92的绝大部分数据类型,以及部分SQL-99、Oracle和SQL Server的数据类型。
基本表的完整性分为实体完整性、域完整性、参考完整性。
(1)实体完整性:定义表中所有行能被唯一标识。一般用主键、唯一索引、UNIQUE关键字及IDENTITY属性来定义。
(2)域完整性:通常指数据的有效性。用来限制数据类型、缺省值、规则、约束、是否可以为空等条件,保证数据的完整性,确保我们不会输入无效的值。
(3)参考完整性:维护多表之间数据的有效性、完整性,通常通过建立外键联系另一表的主键来实现。
2.2.3.1 规划基本表
(1)基本表的命名规则:在DM系统中以字母开头,后面可以接字母(a~z/A~Z)、数字(0~9)和特殊符号($、#、_)。
(2)基本表的数据类型:int,char,varchar,date,clob,blob,number等。
(3)基本表的存储位置:对于自己规划的表空间,如果没有指定表空间,则会存储在系统默认表空间中。在DM系统中,如果不指定表空间,则会存储在MAIN表空间中。
(4)基本表的约束:对表中的数据进行限制,保证数据的正确性、有效性和完整性。DM系统中相关的约束有:主键约束、外键约束、非空约束、唯一约束、检查约束。
①主键约束:用来唯一标识数据库中的每一条记录,主键不能为空,并且主键必须是唯一的。
②外键约束:表的外键是另一个表的主键,外键可以有重复的,可以是空值,外键用来保证数据的正确性。
③非空约束:数据表中的某一列不能为null。
④唯一约束:表中的某一列不能出现重复的值,必须保证值的唯一性。
⑤检查约束:对整个表或者某一列的值进行规范。
2.2.3.2 创建基本表
创建基本表的语法为:
参数说明如下。
(1)<模式名>:指明该表属于哪个模式,缺省为当前模式。
(2)<表名>:指明被创建的基本表名,基本表名最大长度为128字节。
(3)<列名>:指明基本表中的列名,列名最大长度为128字节。
(4)<数据类型>:指明列的数据类型。
(5)<列缺省值表达式>:如果其后的INSERT语句省略了插入的列值,那么此项为列值指定一个缺省值,可以通过DEFAULT指定一个值。DEFAULT表达式串的长度不能超过2048字节;
(6)<列级完整性约束定义>中的参数的意义如下。
①NULL:指明指定列可以包含空值,为缺省选项。
②NOT NULL:非空约束,指明指定列不可以包含空值。
③UNIQUE:唯一性约束,指明指定列作为唯一关键字。
④PRIMARY KEY:主键约束,指明指定列作为基表的主关键字。
⑤CLUSTER PRIMARY KEY:主键约束,指明指定列作为基表的聚集索引(也叫聚簇索引)主关键字。
⑥NOT CLUSTER PRIMARY KEY:主键约束,指明指定列作为基表的非聚集索引主关键字。
⑦CLUSTER KEY:指定列为聚集索引键,但不是唯一的。
⑧CLUSTER UNIQUE KEY:指定列为聚集索引键,并且是唯一的。
⑨USING INDEX TABLESPACE<表空间名>:指定索引存储的表空间。
⑩REFERENCES:指明指定列的引用约束。引用约束要求引用对应列类型必须基本一致。
⑪CHECK:检查约束,指明指定列必须满足的条件。
(7)<表级完整性约束定义>中的参数的意义如下。
①UNIQUE唯一性约束,指明指定列或列的组合作为唯一关键字。
②PRIMARY KEY主键约束,指明指定列或列的组合作为基表的主关键字。指明CLUSTER,表明是主关键字上聚集索引;指明NOT CLUSTER,表明是主关键字上非聚集索引。
③USING INDEX TABLESPACE<表空间名>指定索引存储的表空间。
④FOREIGN KEY指明表级的引用约束,如果使用WITH INDEX选项,则为引用约束建立索引,否则不建立索引,通过其他内部机制保证约束正确性。
⑤CHECK检查约束,指明基表中的每一行必须满足的条件。
⑥与列级约束之间不应该存在冲突。
(8)<检验条件>指明表中一列或多列能否接受的数据值或格式。
下面给出了创建一个基本表的例子。创建一个员工信息表,表名为EMPLOYEE,要求该表中有:
(1)员工编号(EMPNO),数据类型为INT,此列为主键列;
(2)员工姓名(ENAME),数据类型为VARCHAR(15),不允许为空;
(3)工作岗位(JOB),数据类型为VARCHAR(10);
(4)所属领导编号(MGR),数据类型为INT;
(5)入职日期(HIREDATE),数据类型为DATE,默认值为当前日期;
(6)工资(SALARY),数据类型为FLOAT;
(7)部门编号(DEPTNO),数据类型为TINYINT,不允许为空。
除了使用SQL语句创建基本表以外,还可以使用DM管理工具创建基本表。例如,使用DM管理工具创建员工信息表EMPLOYEE,如图2-13所示。
图2-13 创建员工信息表EMPLOYEE
2.2.3.3 创建基本表的相关约束
约束是限制用户输入表中的数据的值的范围,一般分为主键约束、外部键约束、唯一约束、检查约束、非空约束。
表约束的基本语法格式为:
约束名:约束不指定名称时,系统会给定一个名称。
1.主键(PRIMARY KEY)约束
PRIMARY KEY约束用于定义基本表的主键,起唯一标识作用,其值不能为NULL,也不能重复,以此来保证实体的完整性。
其语法格式如下:
完整语法格式详见2.2.3.3节。
2.唯一(UNIQUE)约束
UNIQUE约束用于指明基本表在某一列或多个列的组合上的取值必须唯一。定义了UNIQUE约束的那些列称为唯一键,系统自动为唯一键建立唯一索引,从而保证了唯一键的唯一性。唯一键允许为空和NULL。
其语法格式如下:
完整语法格式详见2.2.3.3节。
3.检查(CHECK)约束
CHECK约束用来检查字段值所允许的范围,例如,一个字段只能输入整数,而且限定在0~100之间的整数,以此来保证域的完整性。
其语法格式为:
完整语法格式详见2.2.3.3节。
4.外部键(FOREIGN KEY)约束
外部键约束用于强制参照完整性,提供单个字段或者多个字段的参照完整性。FOREIGN KEY约束指定某一个列或一组列作为外部键,其中,包含外部键的表称为从表(参照表),包含外部键所引用的主键或唯一键的表称为主表(被参照表)。系统保证从表在外部键上的取值要么是主表中某一个主键值或唯一键值,要么是空值。以此保证两个表之间的连接,确保了实体的参照完整性。
其语法格式为:
完整语法格式详见2.2.3.3节。
当使用外部键约束时,应该考虑以下几个因素。
(1)外部键约束提供了字段参照完整性。
(2)外部键从句中的字段数目和每个字段指定的数据类型必须和REFERENCES从句中的字段相匹配。
(3)外部键约束不能自动创建索引,需要用户手动创建。
(4)用户要想修改外部键约束的数据,就必须有对外部键约束所参考表的SELECT权限或者REFERENCES权限。
(5)参考同一表中的字段时,必须只使用REFERENCES子句,不能使用外部键子句。
(6)一个表中最多可以有31个外部键约束。
(7)在临时表中,不能使用外部键约束。
(8)主键和外部键的数据类型必须严格匹配。
5.非空约束
非空约束表示是否允许该字段的值为NULL。NULL值不是0也不是空白,更不是填入字符串“NULL”,而是表示“不知道”“不确定”或“没有数据”的意思。当某一字段的值一定要输入才有意义时,可以设置为NOT NULL。例如,主键列就不允许出现空值,否则就失去了唯一标识一条记录的作用。
其语法格式如下:
完整语法格式详见2.2.3.3节。
(1)创建非空约束:
使用DM管理工具创建非空约束,如图2-14所示。
(2)创建唯一约束:
使用DM管理工具创建唯一约束,如图2-15所示。
图2-14 创建非空约束
图2-15 创建唯一约束
(3)测试唯一约束:
唯一约束遇到null,忽略,可录入多个null值。
(4)创建主键约束(一个表只能有一个主键约束):
使用DM管理工具创建主键约束,如图2-16所示。
图2-16 创建主键约束
(5)创建检查约束:
使用DM管理工具创建检查约束,如图2-17所示。
图2-17 创建检查约束
(6)创建外键约束:
外键一定是其他表的主键。使用DM管理工具创建外键约束,如图2-18所示。
(7)对列增加注释:
使用DM管理工具对列增加注释,如图2-19所示。
(8)查看约束:
图2-18 创建外键约束
图2-19 对列增加注释
使用DM管理工具查看约束,如图2-20所示。
图2-20 查看约束
2.2.3.4 基本表的维护
(1)基本表增加一列:
使用DM管理工具增加一列,如图2-21所示。
图2-21 增加一列
(2)基本表删除一列:
使用DM管理工具删除一列,如图2-22所示。
图2-22 删除一列
(3)基本表重命名:
使用DM管理工具对基本表进行重命名,如图2-23、图2-24所示。
(4)基本表启用和禁用约束。
查看TEST.T3表的约束:
图2-23 表重命名-1
图2-24 表重命名-2
启用TEST.T3表的约束:
禁用TEST.T3表的约束:
使用DM管理工具启用和禁用约束,如图2-25所示。
图2-25 启用和禁用约束
(5)删除基本表:
图2-26 删除基本表