IT 성장일기

[SQL] 키와 제약 조건 본문

Learning/SQL

[SQL] 키와 제약 조건

고 양 2023. 11. 4. 14:50
반응형
키와 제약 조건

모두의 SQL을 읽고 배운 것을 복습하기 위해 정리해서 기록합니다.
해당 도서는 Oracle 데이터베이스를 기준으로 하고 있습니다.

 


 

0. 키 (Key)와 제약조건 (Constraint)

데이터가 저장되는 테이블에는 컬럼의 속성을 나타내는 키와 데이터의 형식, 중복되는 값 등에 관여하는 제약조건이 존재합니다.
가장 대표적으로 테이블 내에 중복된 값이 존재하지 않게 하기 위한 고유키 등이 있습니다.

키와 제약조건은 컬럼의 속성으로서 설정되며 데이터의 무결성을 보호하기 위한 방법으로서 활용됩니다.

 


 

1. 기본 키 (Primary Key)

기본키는 테이블 내에서 데이터를 식별하는 식별자 (Identifier) 역할을 합니다.
사이트의 계정이나 게임 상의 닉네임, 또는 주민등록번호 뒷자리와 같은 역할입니다.

테이블 내에 오직 한가지 값만을 존재하게 하며 NULL값과 중복된 값을 허용하지 않습니다.

기본키의 특징으로서 아래와 같은 예를 들 수 있습니다.

- 다른 값과 중복되지 않는 고유한 값을 가져야 합니다.
- NULL 값을 가져서는 안 됩니다. 
- 값이 변경될 확률이 낮은 속성을 기본키로 지정하는 것이 좋습니다.
- 기본키는 행을 식별하는 고유한 키로써 사용되기 때문에 한 테이블 당 하나만 지정할 수 있습니다.
- 기본키는 테이블에 무의미하게 중복된 행이 저장되는 것을 방지합니다.

기본키와 관련하여 후보키 (Candidate Key)  대체키 (Alternate Key)라는 개념이 존재합니다.

대체키 또한 기본키와 같이 데이터를 식별하는 고유한 값을 가지게 하는 속성입니다.
다만 주민등록번호처럼 항구성을 가지지 못한 경우나 기본키가 되기에는 조금 부족한 조건을 갖춘 경우
기본키에 준하여 데이터를 식별할 수단으로써 사용됩니다. 마치 핸드폰번호와 같은 역할을 하는 것이지요.

이렇게 데이터를 식별하는 데 있어서 메인이 되는 기본키와 서브가 되는 대체키, 이 모두를 묶어서 후보키라고 부릅니다.

 


 

2. 외래 키 (Foreign Key)

외래키는 테이블과 테이블 사이의 참조 관계 (Relation Ship)를 나타내는 중요한 속성입니다.

예를 들면 사용자의 정보와 사용자의 사용 기록을 관리하는 테이블을 운영한다고 가정했을 때,
사용자 당 사용기록은 하루에도 여러 건씩 생성될 수 있지만 각각의 사용자의 정보는 단 한건만 존재해도 충분합니다.
이럴 때 사용자 정보와 사용기록을 하나의 테이블에서 관리하게 되면 데이터의 크나큰 비효율이 생깁니다.

이럴 경우 보통 사용자 정보와 사용기록을 다른 테이블에서 관리하게 되는데,
(이를 정규화라고 하는데 정규화의 개념은 나중에 배우도록 하겠습니다.)
사용기록을 관리하는 테이블에서는 사용자 정보를 참조하게 됩니다.

아래는 외래키의 특징입니다.

- 메인 테이블과 서브 테이블의 연결 관계를 나타냅니다.
- 참조 되는 컬럼은 고유 키이거나 기본 키여야 합니다. 
- 참조 되는 테이블에 존재하지 않는 정보가 참조하는 테이블에 들어가는 것을 방지합니다.
- 그럼으로써 데이터의 무결성을 높여주는 역할을 하게 됩니다.

 


 

3. 고유 키 (Unique Key)

고유키로 지정된 컬럼은 컬럼에서 유일한 값들로 이루어지게 됩니다. 즉, 테이블 내의 중복 된 값을 허용하지 않습니다.
여기까지는 기본키와 동일합니다. 한 가지 다른 점은 기본키와 달리 고유키로 지정된 컬럼에는 널 값 허용됩니다.

- 중복된 값을 허용하지 않습니다.
- 기본 키와는 달리 NULL을 허용합니다. (기본 키 - NOT NULL = 고유 키 )
- 또한 기본 키와 달리 여러개의 컬럼에 지정할 수 있습니다.

 


 

4. NOT NULL

NULL 값을 허용하지 않는 속성입니다. 값 입력이 필수입니다.

 


 

5. CHECK

CHECK 속성은 사용자가 설정한 조건이나 특정한 값만 입력되게끔 합니다.
그렇기 때문에 입력 값이 조건에 맞지 않으면 어마어마한 오류를 토해내며 값 저장을 거부합니다.

 


 

6. DEFAULT

DEFAULT는 값을 입력하지 않았을 경우 NULL 대신 자동으로 입력되도록 설정한 일종의 기본값입니다.

보통 해당 컬럼에 기본적으로 부여되는 데이터 값이 정해져 있을 경우 사용되는 속성이지만,

기본키 NOT NULL 속성을 부여한 컬럼에 대해 입력되는 데이터가 명시되지 않거나 NULL 값이 입력되는 것이 시도되었을 때
오류를 뱉어내는 대신 매끄럽게 데이터가 삽입될 수 있도록 활용할 수도 있습니다.


 

7. 마지막으로

어떤 제약조건이든 이미 삽입된 데이터 조건에 위반되는 제약조건을 추가할 수는 없습니다.

예를 들면 이미 NULL 값이 저장되어 있는 컬럼에 NOT NULL 속성을 부여한다거나, 기본키 속성을 부여할 수 없으며
CHECK 속성을 부여하기 위해서는 컬럼이 CHECK 범위에 어긋나지 않는 데이터들로만 이루어져 있어야만 합니다.

 


 

이와 같이 테이블에 적용할 수 있는 여러가지 키(Key) 제약조건(Constraint)에 대해 공부해보았습니다.

 

도움이 되어드렸다면 구독 / 좋아요 부탁드립니다.👏🏻

감사합니다.🙂

반응형

'Learning > SQL' 카테고리의 다른 글

[SQL] Join  (2) 2023.11.04
[SQL] 집합 연산자  (2) 2023.11.04
[SQL] 함수 - 그룹 함수  (0) 2023.11.04
[SQL] 함수 - 단일 행 함수 (2)  (0) 2023.11.02
[SQL] 함수 - 단일 행 함수 (1)  (2) 2023.10.23