>데이터 베이스 >MySQL 튜토리얼 >SQL의 순환 참조 제약 조건은 유효하며 어떻게 해결할 수 있습니까?

SQL의 순환 참조 제약 조건은 유효하며 어떻게 해결할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-28 16:47:15107검색

Are Circular Referential Constraints in SQL Valid, and How Can They Be Resolved?

SQL의 순환 참조 제약 조건: 복잡성 탐색

데이터베이스 설계에서는 외래 키 제약 조건을 통해 테이블 ​​간의 관계를 설정하는 것이 일반적입니다. 그러나 테이블이 루프에서 서로 참조하여 순환 종속성을 생성하는 경우 이러한 스키마가 유효한지 질문이 제기됩니다.

순환 참조 예

두 테이블이 있는 다음 스키마를 고려하세요. products 및 products_pictures, 서로 참조:

CREATE TABLE products (
  ID int(10) unsigned NOT NULL AUTO_INCREMENT,
  DEFAULT_PICTURE_ID int(10) unsigned DEFAULT NULL,
  FOREIGN KEY (DEFAULT_PICTURE_ID) REFERENCES products_pictures (ID) ON DELETE SET NULL ON UPDATE SET NULL
);

CREATE TABLE products_pictures (
  ID int(10) unsigned NOT NULL AUTO_INCREMENT,
  PRODUCT_ID int(10) unsigned NOT NULL,
  FOREIGN KEY (PRODUCT_ID) REFERENCES products (ID) ON DELETE CASCADE
);

이 디자인에서 products.DEFAULT_PICTURE_ID는 다음을 나타냅니다. products_pictures.ID 및 products_pictures.PRODUCT_ID는 다시 products.ID를 참조하여 순환 참조를 생성합니다.

타당성 및 의미

전문가들 사이의 일반적인 합의는 데이터베이스 스키마의 순환 참조는 권장되지 않는다는 것입니다. . 삽입 및 업데이트와 같은 데이터베이스 작업을 수행할 때 복잡성과 불일치가 발생할 수 있습니다.

옵션 1: Null 허용 외래 키 열

이 문제를 해결하기 위한 한 가지 옵션은 다음과 같습니다. 두 개의 외래 키 열이 null을 허용하는 경우 یکی اз를 허용합니다. 이는 어떤 테이블에 데이터를 먼저 삽입할지의 "닭과 달걀" 문제를 해결합니다. 그러나 제품이 다른 제품에 속한 기본 그림을 가질 수 있는 데이터 무결성 문제가 발생합니다.

옵션 2: IsDefault 열

또 다른 접근 방식은 제거하는 것입니다. 제품의 DEFAULT_PICTURE_ID 열을 삭제하고 products_pictures에 IsDefault 비트 열을 추가합니다. 이렇게 하면 제품당 하나의 그림만 IsDefault 비트를 설정할 수 있습니다.

옵션 3: 연기 가능한 제약 조건

지연 가능한 제약 조건을 사용하면 특정 제약 조건을 나중에 확인하고 적용할 수 있습니다. 순환 참조 문제. 이 옵션은 MySQL에서 지원되지 않습니다.

옵션 4: 기본 그림에 대한 별도 테이블

순환 종속성을 제거하고 데이터 무결성을 보장하려면 다음과 같은 별도의 테이블을 생성하는 것이 좋습니다. 제품-기본 사진 관계를 저장하는 product_default_picture로. 이 접근 방식을 사용하면 두 외래 키 열 모두 Null을 허용하지 않을 수 있습니다.

결론적으로 순환 참조는 일부 데이터베이스 시스템에서 기술적으로 유효할 수 있지만 일반적으로 권장되지 않습니다. MySQL 스키마의 순환 참조를 처리하고 데이터 무결성을 보장하려면 위에 제시된 옵션을 고려하십시오.

위 내용은 SQL의 순환 참조 제약 조건은 유효하며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.