> 데이터 베이스 > MySQL 튜토리얼 > 관계형 데이터베이스에서 하위 유형으로 작업할 때 참조 무결성을 유지하는 방법은 무엇입니까?

관계형 데이터베이스에서 하위 유형으로 작업할 때 참조 무결성을 유지하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-03 03:59:39
원래의
178명이 탐색했습니다.

How to Maintain Referential Integrity When Working with Subtypes in Relational Databases?

하위 유형에서 참조 무결성을 구현하는 방법

소개

참조 무결성은 관계형 데이터베이스에서 데이터 정확성을 보장하는 데 매우 중요합니다. 이는 외래 키의 참조가 유효하고 참조하는 기본 키와 일치함을 보장합니다. 이 문서에서는 데이터 모델링의 일반적인 시나리오인 하위 유형에서 참조 무결성을 구현하는 방법을 살펴봅니다.

배타적 하위 유형

배타적 하위 유형 관계에서 각 기본 유형 행은 다음을 가질 수 있습니다. 하나의 하위 유형 행. 이는 일반적으로 하위 유형을 식별하는 기본 유형 테이블의 판별자 열을 사용하여 구현됩니다.

함수 및 CHECK CONSTRAINT를 사용한 구현:

  1. "사용자 만들기 기본 키와 판별자 값의 조합이 기본 유형에 존재하는지 확인하는 정의된" 함수(UDF) table.
  2. 하위 유형 행을 삽입하기 전에 상위 기본 유형 행이 존재하는지 확인하기 위해 UDF를 호출하는 하위 유형 테이블에 CHECK CONSTRAINT를 구현합니다.

예:

-- UDF to check basetype existence
CREATE FUNCTION CheckBaseTypeExists (@PrimaryKey INT, @Discriminator CHAR(1)) 
RETURNS BIT
AS
BEGIN
    DECLARE @Exists BIT;
    
    SELECT @Exists = CASE WHEN EXISTS (SELECT 1 FROM BaseType WHERE PrimaryKey = @PrimaryKey AND Discriminator = @Discriminator) THEN 1 ELSE 0 END;
    
    RETURN @Exists;
END;

-- CHECK CONSTRAINT in Subtype
ALTER TABLE Subtype
ADD CONSTRAINT FK_BaseType FOREIGN KEY (PrimaryKey, Discriminator) REFERENCES BaseType (PrimaryKey, Discriminator)
CHECK (CheckBaseTypeExists(PrimaryKey, Discriminator) = 1);
로그인 후 복사

비독점 하위 유형

비배타적 하위 유형 관계에서 기본 유형 행은 여러 하위 유형 행을 가질 수 있습니다. 이 경우 판별자 열을 사용할 필요가 없습니다.

PRIMARY KEY 및 FOREIGN KEY를 사용한 구현:

하위 유형 테이블의 PRIMARY KEY는 FOREIGN KEY이기도 합니다. 기본 유형 테이블. 이렇게 하면 각 하위 유형 행이 고유한 기본 유형 행과 연결됩니다.

예:

CREATE TABLE Subtype (
    PrimaryKey INT PRIMARY KEY,
    ForeignKey INT REFERENCES BaseType (PrimaryKey),
    ...
);
로그인 후 복사

트랜잭션을 사용한 시행

설명된 방법은 사용자가 기본 유형의 판별자를 직접 업데이트하는 것을 막지 않는다는 점에 유의하는 것이 중요합니다. 또는 하위 유형 행. 이러한 시나리오에서 참조 무결성을 적용하려면 트랜잭션을 사용해야 합니다. 트랜잭션은 여러 작업이 전체적으로 커밋되거나 작업이 실패할 경우 롤백되도록 보장합니다.

결론

설명된 방법을 사용하여 하위 유형에 참조 무결성을 구현하면 데이터베이스의 데이터 관계가 유지되고 일관되게 유지되도록 할 수 있습니다. 트랜잭션은 직접적인 데이터 조작으로 인해 발생할 수 있는 데이터 불일치를 방지하는 데 중요한 역할을 합니다.

위 내용은 관계형 데이터베이스에서 하위 유형으로 작업할 때 참조 무결성을 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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