MySQL의 조건부 외래 키 제약 조건: 다형성 연관 문제 해결
외래 키 제약 조건은 한 테이블의 값이 다른 관련 테이블의 해당 값을 참조하도록 보장하여 데이터 무결성을 강화합니다. 그러나 어떤 경우에는 조건에 따라 다른 테이블을 참조하는 외래 키가 테이블에 필요할 수 있습니다. 이를 조건부 외래 키 제약 조건이라고 합니다.
이 경우 과제는 애플리케이션의 다양한 부분에 대한 설명을 저장할 수 있는 Comments
테이블을 만드는 것입니다. 예를 들어 블로그 게시물 및 사용자 이미지에 대한 댓글입니다. 이상적으로는 Comments
테이블의 foreign_id
에 대한 외래 키 제약 조건은 model
이 'blogpost'로 설정된 경우에만 적용되어야 합니다.
해결책: 다형성 연관
안타깝게도 MySQL은 조건부 외래 키 제약 조건을 직접 지원하지 않습니다. 대신 다형성 연관이라는 디자인 패턴을 사용하는 것이 해결책입니다. 이 스키마는 Commentable
이라는 중간 테이블을 도입합니다.
<code class="language-sql">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) );</code>
각 콘텐츠 유형(예: BlogPost
, UserPicture
)은 Commentable
의 하위 유형이 되며 외래 키를 통해 참조합니다.
<code class="language-sql">CREATE TABLE BlogPosts ( blogpost_id INT PRIMARY KEY, -- 非自增 ... FOREIGN KEY (blogpost_id) REFERENCES Commentable(id) ); CREATE TABLE UserPictures ( userpicture_id INT PRIMARY KEY, -- 非自增 ... FOREIGN KEY (userpicture_id) REFERENCES Commentable(id) );</code>
이러한 하위 유형 테이블에 데이터를 추가하기 전에 Commentable
테이블에 새 행을 삽입하여 고유 ID를 생성해야 합니다. 생성된 ID는 하위 유형 테이블에서 외래 키로 사용됩니다.
이 디자인 패턴을 사용하면 참조 무결성 제약 조건을 적용하여 블로그 게시물의 댓글은 블로그 게시물만 참조하고 사용자 사진의 댓글은 사용자 사진만 참조하도록 보장할 수 있습니다.
위 내용은 다형성 연관을 위해 MySQL에서 조건부 외래 키 제약 조건을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!