Проверьте значение атрибута из другой таблицы, используя внешний ключ при создании таблицы - PullRequest
0 голосов
/ 13 декабря 2018

Можно ли проверить значение атрибута в другой таблице при создании таблицы?Например, у меня есть этот билет в таблицу:

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.Или мне нужно создать внешнюю функцию или клиентское приложение, которое управляет этим?

1 Ответ

0 голосов
/ 24 декабря 2018

Вы, похоже, спрашиваете, можете ли вы использовать механизм внешнего ввода ключей, чтобы гарантировать, что только люди с должностью "counter" могут создавать заявки в службу поддержки.

Короткий ответ - нет, в этой таблице не может быть внешнего ключа, который проверяет pk таблицы сотрудников на значение, указанное в id_counter_fk1, и принудительно устанавливает тип сотрудника C

You.может сделать это несколькими другими способами, наиболее прямым из которых является триггер, который предотвращает вставку, если сотрудник связан не с типом C, но существует механизм FK, обеспечивающий наличие или отсутствие удаленной записи, а не ее наличие и особые свойства.

...