У меня возникают проблемы с созданием ограничения для поля внешнего ключа, так что внешний ключ может быть введен только в том случае, если этот внешний ключ ссылается на строку, содержащую определенный атрибут.Ограничение 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
, поэтому я не уверен, как бы определить ограничение.
Какую [СУБД] (https://en.wikipedia.org/wiki/Database) вы используете? –