2015-03-07 8 views
1

У меня возникают проблемы с созданием ограничения для поля внешнего ключа, так что внешний ключ может быть введен только в том случае, если этот внешний ключ ссылается на строку, содержащую определенный атрибут.Ограничение SQL для внешнего ключа

Чтобы лучше понять, что я имею в виду, я создал следующий пример. Таблица сущностей Employee содержит поле Grade, которое может быть либо «S» для сотрудника старшего уровня, либо «J» для сотрудника младшего уровня. В таблице Expenses я хочу ограничить любые записи в поле ApprovedBy теми значениями EmpNo, которые имеют поле Grade, содержащее «S» в таблице Employee.

CREATE TABLE Employee 
(EmpNo INT PRIMARY KEY, 
FirstName VARCHAR(15), 
LastName VARCHAR(15), 
Grade CHAR(1), 
CONSTRAINT chk_ValidGrade CHECK (Grade IN ('J','S')) 
) 

CREATE TABLE Expenses 
(ExpenseId INT IDENTITY(1,1) PRIMARY KEY, 
Amount FLOAT, 
ApprovedBy INT FOREIGN KEY REFERENCES Employee(EmpNo), 
) 

Я инстинктивно хочу использовать соединение или другую функцию реляционной алгебры для этого. Однако я понимаю, что вы не можете использовать функцию SELECT в функции CHECK, поэтому я не уверен, как бы определить ограничение.

+0

Какую [СУБД] (https://en.wikipedia.org/wiki/Database) вы используете? –

ответ

0

Насколько я знаю, вы не можете использовать ограничение проверки для этой задачи. Вы должны использовать триггер для вставки и обновления в таблице «Расходы».

Смежные вопросы