카테고리 없음

[mysql] MySQL-조건부 외래 키 제약

행복을전해요 2020. 12. 31. 07:34

Polymorphic Associations 라는 디자인을 시도하고 있습니다. 즉, 외래 키는 여러 관련 테이블의 행을 참조 할 수 있습니다.

그러나 외래 키 제약 조건은 정확히 하나의 테이블을 참조해야합니다. 테이블의 다른 열에있는 값에 따라 다른 테이블을 참조하는 외래 키를 선언 할 수 없습니다 Comments. 이것은 관계형 데이터베이스 설계의 여러 규칙을 위반합니다.

더 나은 해결책은 주석에서 참조하는 일종의 "수퍼 테이블"을 만드는 것입니다.

CREATE TABLE Commentable (
  id SERIAL PRIMARY KEY
  );
  
  CREATE TABLE Comments (
    comment_id SERIAL PRIMARY KEY,
      foreign_id INT NOT NULL,
        ...
          FOREIGN KEY (foreign_id) REFERENCES Commentable(id)
          );
          

각 콘텐츠 유형은이 수퍼 테이블의 하위 유형으로 간주됩니다. 이것은 인터페이스 의 객체 지향 개념과 유사합니다 .

CREATE TABLE BlogPosts (
  blogpost_id INT PRIMARY KEY, -- notice this is not auto-generated
    ...
      FOREIGN KEY (blogpost_id) REFERENCES Commentable(id)
      );
      
      CREATE TABLE UserPictures (
        userpicture_id INT PRIMARY KEY, -- notice this is not auto-generated
          ...
            FOREIGN KEY (userpicture_id) REFERENCES Commentable(id)
            );
            

당신이에 행을 삽입하기 전에 BlogPosts또는 UserPictures, 당신은 할 새 행을 삽입해야합니다 Commentable새로운 pseudokey ID를 생성 할 수 있습니다. 그런 다음 해당 하위 유형 테이블에 콘텐츠를 삽입 할 때 생성 된 ID를 사용할 수 있습니다.

이 모든 작업을 수행하면 참조 무결성 제약 조건에 의존 할 수 있습니다.



출처
https://stackoverflow.com/questions/2003047