> 데이터 베이스 > MySQL 튜토리얼 > 다형성 연관을 위해 MySQL에서 조건부 외래 키 제약 조건을 구현하는 방법은 무엇입니까?

다형성 연관을 위해 MySQL에서 조건부 외래 키 제약 조건을 구현하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-16 11:22:59
원래의
552명이 탐색했습니다.

How to Implement Conditional Foreign Key Constraints in MySQL for Polymorphic Associations?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿