满足文档中的要求,按照文档里创建的表名为每个表添加指定类型的约束(主键约束、唯一约束、外键约束、检查约束以及空值约束),补充完剩下的代码。
时间: 2024-09-30 13:05:43 浏览: 31
基于您提供的SQL脚本,以下是为各个表添加了所有提到的五种不同类型的约束后的完整代码:
### DEPTEXPM 表
- 主键约束已存在无需重复添加。
- 唯一约束示例:为`DEPTNAME`添加唯一性以保证部门名称的独特性。
- 检查约束示例:确保`DEPTNO`以字母"D"开头。
- 空值约束示例:规定`DEPTNAME`不允许为空(已在原定义中给出)。
```sql
ALTER TABLE DEPTEXPM
ADD CONSTRAINT UQ_DEPTNAME UNIQUE (DEPTNAME);
ALTER TABLE DEPTEXPM
ADD CONSTRAINT CHK_DEPTNO CHECK (DEPTNO LIKE 'D%');
```
### EMPLEXPM 表
- 外键约束已经给出,但是参考表应是员工表而非部门表;这里我们假设这是个笔误并修正它。
- 添加对`SEX`字段的检查约束来限制其只能取'男'或'女'。
- 设置`NATIVE1`字段上允许空值。
```sql
ALTER TABLE EMPLEXPM
ADD CONSTRAINT FK_DEPTNO FOREIGN KEY(DEPTNO) REFERENCES DEPTEXPM(DEPTNO);
ALTER TABLE EMPLEXPM
ADD CONSTRAINT CHK_SEX CHECK (SEX IN ('男', '女'));
ALTER TABLE EMPLEXPM MODIFY NATIVE1 VARCHAR2(18) NULL;
```
### ORDEREXPM 表
- 对于`ORDERNO`添加唯一性约束。
- 在`SALEDATE`上设置检查条件,使其日期必须大于某个特定时间点之前的所有订单日期。
- 允许某些列如`EMPLNO`接受NULL值表示未知销售人员。
```sql
ALTER TABLE ORDEREXPM
ADD CONSTRAINT UQ_ORDERNO UNIQUE (ORDERNO);
ALTER TABLE ORDEREXPM
ADD CONSTRAINT CHK_SALEDATE CHECK (SALEDATE > TO_DATE('20230101', 'YYYYMMDD'));
```
### DETAILEXPM 表
- 给`DISCOUNT`添加检查约束,确保折扣介于0到1之间。
- 设定`TOTAL`可以为空的情况发生。
```sql
ALTER TABLE DETAILEXPM
ADD CONSTRAINT CHK_DISCOUNT CHECK (DISCOUNT BETWEEN 0 AND 1);
ALTER TABLE DETAILEXPM MODIFY TOTAL NUMBER NULL;
```
### GOODSEXPM 表
- 已经通过UNIQUE关键字给商品名字属性施加了唯一性规则。
- 使用CHECK子句来验证库存数量是否非负数。
- 允许单位价格字段未赋值代表免费赠品等情况的存在可能。
```sql
ALTER TABLE GOODSEXPM
ADD CONSTRAINT CHK_STOCK CHECK (STOCK >= 0);
ALTER TABLE GOODSEXPM MODIFY UNITPRICE NUMBER NULL;
```
以上就是针对所列出的所有表格进行了合理的扩展与完善后得到的结果。注意在实际应用环境中还需考虑具体业务逻辑及数据安全性等方面因素做出相应调整。
阅读全文