sql >> Database >  >> RDS >> Sqlserver

Integriteit van subklassen behouden in een relationele database

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)
);


  1. Kan ik PostgreSQL-functies schrijven op Ruby on Rails?

  2. Hoe de mediaan te berekenen in PostgreSQL

  3. Aankondiging van ClusterControl 1.4.1 - de ProxySQL-editie

  4. Gratis MySQL-synchronisatietool