Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Duy trì tính toàn vẹn của lớp con trong cơ sở dữ liệu quan hệ

Mỗi bản ghi Sinh viên sẽ có một cột Lớp con (giả sử đó là một CHAR (1)). {A =Vận động viên, M =nhạc sĩ ...}

Bây giờ hãy tạo bảng Vận động viên và Nhạc sĩ của bạn. Chúng cũng phải có cột SubClass, nhưng phải có một ràng buộc kiểm tra mã hóa cứng giá trị cho loại bảng mà chúng đại diện. Ví dụ:bạn nên đặt giá trị mặc định là 'A' và ràng buộc KIỂM TRA là 'A' cho cột Lớp con trên bảng Vận động viên.

Liên kết bảng Nhạc sĩ và Vận động viên của bạn với bảng Sinh viên bằng khóa ngoại COMPOSITE của StudentID AND Subclass. Và bạn đã hoàn thành! Đi thưởng thức một tách cà phê ngon.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi CTE:Các loại không khớp giữa phần neo và phần đệ quy

  2. Bỏ qua mili giây trong một ngày

  3. Khắc phục “Lỗi tràn số học khi chuyển đổi IDENTITY thành kiểu dữ liệu…” trong SQL Server

  4. SQL Server:chuyển đổi ((int) year, (int) month, (int) day) thành Datetime

  5. Cách tìm vị trí tệp mặc định cho tệp dữ liệu và tệp nhật ký trong SQL Server