외부 키 제약 조건 자습서

소개

외부 키 사용 방법을 아는 것이 중요합니다. 외래 키는 두 테이블 간의 참조 무결성을 유지하도록 설계된 특정 형식의 제약 조건입니다. 간단히 말해 외래 키는 두 테이블의 데이터 간의 링크를 설정하는 열 또는 열 집합입니다. 한 테이블의 외래 키는 다른 테이블의 기본 키를 참조하여 테이블 간의 관계를 만듭니다. 이 글에서,우리는 포스트그레스 외래 키를 생성하고 그 사용의 몇 가지 예를 살펴하는 방법을 설명 할 것이다.

필수 구성 요소

이 자습서를 진행하면서 외래 키 관계가 있는 테이블에 대해 작업하게 됩니다. 또한 해당 열 중 하나에 대해 해당 제약 조건을 공유하는 두 개의 테이블이 있어야합니다.

액세스 권한이 있는지 확인

psql -V명령을 사용 하 여 설치 되 고 제대로 작동 하는지 확인 합니다. 포스트그레스에 연결하고 명령줄 인터페이스를 입력하려면psql명령을 사용하십시오.

참고:psql: FATAL: role "linux" does not exist메시지와 함께 오류가 발생 하는 경우 포스트그레스 아마 시스템의 사용자 이름을 사용 하 여 연결을 시도 합니다. 이 문제를 해결하려면sudo -u postgres -i명령을 사용하여 사용자 이름을postgres으로 전환한 다음 다시 액세스하십시오.외부 키에 대한 테이블 만들기

우리가 할 첫 번째 일은psql명령 줄 인터페이스를 사용하여 데이터베이스를 만드는 것입니다:

:

1
데이터베이스 생성;

다음은 예입니다:

1
데이터베이스 테스트 데이터베이스 만들기;

우리는 또한”어머니”테이블 또는 다른 테이블과 관계가있는 테이블 역할을하는 테이블을 만들 수 있습니다. 아래 표시된 기본 구문을 사용합니다:

1
테이블 이름 생성(열 이름+데이터 유형+제약 조건))

이 자습서의 목적을 위해price라는 테이블을 기본 키id로 만듭니다:

1
테이블 가격 만들기(아이디 지능 기본 키,가격 실제);

다음 섹션에서는 가격 테이블의id열에 외래 키 관계가 있는 다른 테이블을 만듭니다.

외래 키 제약 조건 사용

앞에서 언급했듯이FOREIGN KEY제약 조건은 다른 테이블의 기본 키를 참조합니다. 우리는 테이블에 여러 외래 키를 가질 수 있습니다;각 키는 다른 테이블과의 관계에 따라 달라집니다.

FOREIGN KEY제약 조건이 있는 테이블을 만들려면 다른 테이블을 참조해야 합니다. 다음 예제를 살펴 보겠습니다:

1
2
3
4
5
테이블 자동차 생성(
),
이름 텍스트,
브랜드 텍스트);

cars테이블에price테이블을 참조하는 외래 키가 있습니다. 즉,”자식”테이블의 외래 키 열 값은”어머니”테이블에서 참조로 옵니다.

테이블의 세부 정보를 보려면\d명령 뒤에 테이블 이름을 사용합니다:

1
2
3
4
5
6
7
8
9
표”공개.차”
열/유형/데이터 정렬/널 가능/기본값
——–+———+———–+———-+———
이 예제에서는 외부 키 제약 조건(예:외부 키 제약 조건)을 사용하여 외부 키 제약 조건(예:외부 키 제약 조건)을 사용하여 외부 키 제약 조건(예:외부 키 제약 조건)을 사용하여 외부 키 제약 조건(예:외부 키 제약 조건)을 사용하여 외부 키 제약 조건(예:외부 키 제약 조건)을 사용하여 외부 키 제약 조건(예:외부 키 제약 조건)을 사용하여 외부 키 제약 조건(예:외부 키 제약 조건)을 사용하여 외부 키 제약 조건(예:외부 키 제약 조건))

CREATE TABLE명령에서 열 이름을 선언할 때FOREIGN KEY키워드를 명시적으로 사용하여 외래 키 제약 조건을 선언할 수도 있습니다:

1
2
3
4
5
6
7
8
테이블 카 생성(
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,);
);

이 시점에서,당신은 당신이 실수로 테이블cars에서 레코드를 삭제 한 경우 무슨 일이 일어날 지 궁금 할 것이다—당신은 오류가 발생합니까? 실제로 포스트그레스는 다른 해당 테이블의 레코드도 삭제되지 않는 한 레코드를 삭제할 수 없습니다.

다음 옵션 중 하나(NO ACTION,DELETE CASCADEDELETE RESTRICT)를 사용하여 다른 테이블에 연결된 레코드가 삭제될 때 어떤 일이 발생할지 결정할 수 있습니다.

다음 예제에서는 테이블에 적용되는DELETE RESTRICT제약 조건을 보여 줍니다:

1
2
3
4
5
테이블 카 생성(
,
,
,
,
,
,
,
,
,
,
,

참고:이 제약 조건은 연결된 모든 값이 제거되거나 제약 조건 자체가 제거되지 않으면 행을 삭제할 수 없습니다.

다음 예제에서는 동작 중인DELETE CASCADE제약 조건을 보여 줍니다:

1
2
3
4
5
테이블 카 생성(
테이블 카 생성(
테이블 카 생성),
테이블 카 생성(
테이블 카 생성),
테이블 카 생성(
테이블 카 생성),
테이블 카 생성(
테이블 카 생성),
이름 텍스트,
브랜드 텍스트);

참고:DELETE CASCADE제약 조건을 사용하면 부모 레코드를 삭제할 수 있지만 해당 자식 레코드도 삭제됩니다. 계단식 삭제는 다른 테이블의 행을 실수로 삭제하기가 너무 쉽기 때문에 프로덕션에서 사용하지 않는 것이 좋습니다.

NO ACTION옵션은 위에서 언급한 두 제약 조건 중 하나를 지정하지 않은 경우 오류를 표시하는 기본 작업입니다.

결론

관계형 데이터베이스에서는 다른 테이블의 데이터가 특정 링크 또는 관계를 갖는 것이 일반적입니다. 외래 키 제약 조건은 이 데이터의 참조 무결성을 보호하여 다른 테이블의 데이터와 관계가 있을 때 데이터가 한 테이블에서 삭제되지 않도록 하는 효과적인 방법을 제공합니다. 이 자습서에서는 포스트그레스 외래 키의 작동 방식에 대한 개요를 제공하고 이 제약 조건을 다른 방식으로 사용하는 방법에 대한 예제를 제공합니다. 이러한 예제를 가이드로 사용하여,당신은 자신의 데이터베이스에 외래 키 관계를 구현할 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다.