在创建表时使用外键检查另一个表的属性值

时间:2018-12-13 19:50:41

标签: sql validation foreign-keys oracle10g create-table

在创建表时是否可以检查另一个表中的属性值?例如,我有这张票证:

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)
);

此表与employee表相关,该表具有名为type的属性,该属性可以等于C-对于柜台,S-对于秘书等...我想知道是否有可能在创建以下内容时添加约束验证插入的员工的表是否具有一个employee.type ='C',其中受雇人.id_pk = ticket.id_counter_fk2。还是我必须创建一个用于管理此功能的外部功能或客户端应用?

1 个答案:

答案 0 :(得分:0)

您似乎在询问是否可以使用外键机制来确保只有具有“计数器”职称的人员才能创建支持凭单。

简短的回答是“否”,您不能在此表上使用外键检查雇员表pk中id_counter_fk1中给出的值并强制雇员类型为C

您可以通过其他几种方式来执行此操作,最直接的触发方式是:如果链接的雇员不是C类型,则阻止插入操作,但是FK机制存在以确保是否存在远程记录,而不是存在远程记录并具有特殊的属性