sql >> Database teknologi >  >> RDS >> Sqlserver

Vedligeholdelse af underklasseintegritet i en relationel database

Hver elevpost vil have en SubClass-kolonne (antag for argumentets skyld, at det er en CHAR(1)). {A =Atlet, M=musiker...}

Opret nu dine atlet- og musikerborde. De skal også have en SubClass-kolonne, men der bør være en kontrolbegrænsning, der hardkoder værdien for den type tabel, de repræsenterer. Du bør f.eks. sætte en standard på 'A' og en KONTROL-begrænsning på 'A' for kolonnen SubClass på atlettabellen.

Link dine musiker- og atletborde til elevbordet ved hjælp af en KOMPOSIT fremmednøgle af StudentID OG Underklasse. Og du er færdig! Nyd en god kop kaffe.

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. Hvordan får man kolonneattributter forespørgsel fra tabelnavn ved hjælp af PostgreSQL?

  2. Forespørgsel for at hente alle rækker fra forrige måned

  3. Få kun dato uden tid i Oracle

  4. Bedste måde at få PK Guide af indsat række