sql >> データベース >  >> RDS >> Sqlserver

リレーショナルデータベースでのサブクラスの整合性の維持

    各Studentレコードには、サブクラス列があります(引数のためにCHAR(1)であると想定します)。 {A =アスリート、M=ミュージシャン...}

    次に、アスリートとミュージシャンのテーブルを作成します。また、サブクラス列も必要ですが、それらが表すテーブルのタイプの値をハードコーディングするチェック制約が必要です。たとえば、AthleteテーブルのSubClass列には、デフォルトの「A」とCHECK制約の「A」を設定する必要があります。

    StudentID AND SubclassのCOMPOSITE外部キーを使用して、MusicianテーブルとAthleteテーブルをStudentテーブルにリンクします。そして、あなたは完了です!素敵なコーヒーを楽しみに行きましょう。

    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. SQLServerAcademyパートIIを使用したMicrosoftAccessにご参加ください

    2. 一括収集の使用中にLIMITの値を設定する

    3. 最初のSELECTが0行を返す場合の2番目のSELECTクエリ

    4. GitHubのサンプルスキーマ