sql >> Base de Datos >  >> RDS >> Sqlserver

Mantener la integridad de la subclase en una base de datos relacional

Cada registro de estudiante tendrá una columna de subclase (supongamos, por el bien del argumento, que es un CHAR(1)). {A =Atleta, M=músico...}

Ahora crea tus tablas de atletas y músicos. También deben tener una columna SubClass, pero debe haber una restricción de verificación codificando el valor para el tipo de tabla que representan. Por ejemplo, debe poner un valor predeterminado de 'A' y una restricción de VERIFICACIÓN de 'A' para la columna Subclase en la tabla Atleta.

Vincule sus tablas de Músico y Atleta a la tabla de Estudiante usando una clave foránea COMPUESTA de StudentID Y Subclase. ¡Y tu estas listo! Ve a disfrutar de una buena taza de café.

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