Вы всегда можете добавить несколько ограничений внешнего ключа для одного столбца, но ALL из них будут применены, а не только один из них.Например:
CREATE TABLE Addresses
(
Address_ID VARCHAR (10) PRIMARY KEY,
Student_ID VARCHAR (20),
Name CHAR (50),
Surname CHAR (30),
Building/House_Number INT (5),
Street CHAR (20),
City CHAR (30),
Postcode VARCHAR (10),
FOREIGN KEY (Student_ID) REFERENCES Students (Student_ID)
FOREIGN KEY (Student_ID) REFERENCES Staff (Staff_ID)
);
Это, вероятно, не то, что вы хотите.Возможно, вам нужно иметь два столбца, каждый из которых указывает на отдельную таблицу;а для столбцов один всегда равен null
, а другой не равен нулю.Вы можете сделать это, как показано ниже:
CREATE TABLE Addresses
(
Address_ID VARCHAR (10) PRIMARY KEY,
Student_ID VARCHAR (20),
Staff_ID VARCHAR(20),
Name CHAR (50),
Surname CHAR (30),
Building/House_Number INT (5),
Street CHAR (20),
City CHAR (30),
Postcode VARCHAR (10),
FOREIGN KEY (Student_ID) REFERENCES Students (Student_ID),
FOREIGN KEY (Staff_ID) REFERENCES Staff (Staff_ID),
constraint ct1 check (Student_ID is null and Staff_ID is not null
or Student_ID is not null and Staff_ID is null)
);
Ограничение ct1
гарантирует, что один и только один из них является "активным" в любой данный момент времени.