【发布时间】:2018-12-13 19:50:40
【问题描述】:
是否可以在创建表时检查不同表中的属性值?例如我有这张桌子票:
CREATE TABLE ticket
(
id_ticket_pk NUMBER(4) PRIMARY KEY,
hand_in_date DATE NOT NULL,
num_clothes NUMBER(4) NOT NULL,
deposite NUMBER (8,2) NOT NULL,
comment VARCHAR2(40),
tax NUMBER(5,3) NOT NULL,
status VARCHAR2(15) NOT NULL,
id_counter_fk1 NUMBER(4),
id_client_fk2 NUMBER(4),
CONSTRAINT ticket_id_counter_fk1
FOREIGN KEY (id_counter_fk1) REFERENCES empleado(id_employee_pk),
CONSTRAINT ticket_id_client_fk2
FOREIGN KEY(id_client_fk2) REFERENCES client(id_client_pk)
);
此表与雇员表相关,该表具有一个名为 type 的属性,该属性可以等于 C - 代表柜台,S- 代表秘书等...我想知道是否可以在创建时添加约束验证插入的员工的表有一个employee.type = 'C',其中employee.id_pk = ticket.id_counter_fk2。还是我必须创建一个外部函数或客户端应用程序来管理它?
【问题讨论】:
-
您是否要求引用两个远程表的外键?
-
是的,我想做的是使用外键计数器的约束,从员工中选择员工 id = 计数器 id,验证所述员工的类型是 C(计数器)。我最终做的是一个管理数据插入、删除和修改的客户端应用程序。
-
"有一个employee.type = 'C' where employee.id_pk = ticket.id_counter_fk2" 不清楚。请使用足够多的单词、句子和对部分示例的引用来清楚。 (然后用谷歌搜索你会发现:) PS 有一个常见的习惯用法允许声明性约束强制执行(因此避免触发),你在 id 上声明一个 FK 加上在票证中添加的(子类型/变体)标签列,其值为 'C ' 在每一行。 (最好是计算/生成的。)它碰巧违反了 2NF——就像任何不是 CK 函数的计算/生成的列一样——但这不是正确执行约束的问题。
标签: sql validation foreign-keys oracle10g create-table