Elke studentrecord heeft een kolom SubClass (neem ter wille van het argument aan dat het een CHAR(1) is). {A =Atleet, M=muzikant...}
Maak nu uw Atleten- en Muzikanttafels. Ze moeten ook een kolom Subklasse hebben, maar er moet een controlebeperking zijn die de waarde hard codeert voor het type tabel dat ze vertegenwoordigen. U moet bijvoorbeeld een standaardwaarde 'A' en een CHECK-beperking van 'A' voor de kolom Subklasse in de Athlete-tabel plaatsen.
Koppel je Muzikant- en Atleettafels aan de Student-tabel met behulp van een SAMENGESTELDE refererende sleutel van StudentID AND Subclass. En je bent klaar! Ga genieten van een lekker kopje koffie.
CREATE TABLE Student (
StudentID INT NOT NULL IDENTITY PRIMARY KEY,
SubClass CHAR(1) NOT NULL,
Name VARCHAR(200) NOT NULL,
CONSTRAINT UQ_Student UNIQUE (StudentID, SubClass)
);
CREATE TABLE Athlete (
StudentID INT NOT NULL PRIMARY KEY,
SubClass CHAR(1) NOT NULL,
Sport VARCHAR(200) NOT NULL,
CONSTRAINT CHK_Jock CHECK (SubClass = 'A'),
CONSTRAINT FK_Student_Athlete FOREIGN KEY (StudentID, Subclass) REFERENCES Student(StudentID, Subclass)
);
CREATE TABLE Musician (
StudentID INT NOT NULL PRIMARY KEY,
SubClass CHAR(1) NOT NULL,
Instrument VARCHAR(200) NOT NULL,
CONSTRAINT CHK_Band_Nerd CHECK (SubClass = 'M'),
CONSTRAINT FK_Student_Musician FOREIGN KEY (StudentID, Subclass) REFERENCES Student(StudentID, Subclass)
);