CS 길라잡이
정보처리기사 이론
읽기 설정
글꼴 조합

제목 · 본문 순서예요. 선택하면 지금 읽는 화면에 적용돼요.

글꼴 출처 ↗
읽기 글자 크기

정보처리기사 · DB·SQL · 03/15

연결과 값에 규칙 걸기

없는 책의 대출을 DB가 막게 하려면?

참조 무결성은 연결의 유효성을 지킨다. CHECK와 NOT NULL은 저장할 값의 조건을 각각 맡는다.

loans.book_id가 books.book_id를 참조하면 존재하지 않는 책번호로 대출을 추가할 수 없다. 책 한 권을 여러 번 빌릴 수 있으므로 외래키 값 자체는 중복될 수 있다.

pages에 CHECK(pages > 0)만 걸면 음수는 거절하지만 NULL은 허용된다. CHECK는 조건이 거짓일 때 거절하고 미정인 경우에는 통과한다. 값이 반드시 있어야 한다면 NOT NULL을 따로 선언한다.

부모 행 삭제 때 자식도 지울지, 삭제를 막을지, NULL로 바꿀지는 참조 동작을 정해 결정한다. 학습 기록을 보존해야 하는 업무에서 CASCADE를 습관적으로 붙이지 않는다.

  1. 01 →

    행의 식별

  2. 02 →

    연결의 유효성

  3. 03 →

    값의 범위

  4. 04

    값의 존재

같은 상황에서 비교하기

개념의 기준과 확인할 점
개념기준확인할 점
PRIMARY KEY자기 행의 식별중복·NULL을 금지한다
FOREIGN KEY참조 대상의 존재참조 열의 NULL 허용 여부는 별도다
CHECK값이 조건에 맞는가NULL 금지와 다르다
NOT NULL값이 있는가범위 검사는 하지 않는다

도서관 예제로 따라가기

CREATE TABLE books (
  book_id INTEGER PRIMARY KEY,
  title TEXT NOT NULL,
  shelf_code TEXT REFERENCES shelves(code),
  pages INTEGER CHECK (pages > 0)
);

쪽수 0은 거절된다. 쪽수 NULL은 허용된다. loans의 책번호는 별도 FOREIGN KEY로 books에 연결한다.

공통 예제 데이터 보기
books
book_idtitleshelf_codepages
1SQL 입문DB120
2설계 노트SW200
3관계 모델DBNULL
4분산 읽기NULL160
loans
loan_idbook_id
111
121
132

내 말로 설명해 보기

CHECK(pages > 0)에서 NULL이 통과하는 이유와 막는 방법은?

0/6,000자 · 브라우저 저장 · 계정 동기화 없음

설명한 뒤 점검하기

설명 예시 확인

NULL과의 비교는 미정이다. CHECK는 미정을 거절하지 않으므로 값이 필요하면 NOT NULL을 함께 쓴다.

암기한 문장과 같을 필요는 없어요. 개념의 기준과 예외가 맞는지 비교하세요.

참고한 자료

제약조건 ↗

PostgreSQL 18 · 확인 2026-10-28

이전 개념 자료와의 연결

이전 자료에서 다룬 주제를 이어받아 설명과 예시를 다시 썼어요.