CS All in One
DATABASE문제집공식 자료실

DATABASE · CHAPTER 01

기초 · 45

관계형 모델과 정규화

데이터를 한 번만, 관계는 명확하게

키와 관계를 설계하고 중복이 만드는 갱신 이상을 설명한다.

CONCEPTS

개념을 문장으로 설명하기

01

기본 키

각 행을 유일하게 식별하는 값입니다.

예시

student_id가 같으면 같은 학생 행을 가리켜야 합니다.

CHECK이름은 중복될 수 있으므로 좋은 기본 키가 아닐 수 있다.
02

외래 키

다른 테이블의 기본 키를 참조해 관계를 표현하는 열입니다.

예시

enrollment.student_id가 student.id를 참조합니다.

CHECK존재하지 않는 학생의 수강 기록을 막을 수 있다.
03

정규화

중복과 갱신 이상을 줄이기 위해 사실을 적절한 테이블로 분리하는 설계 과정입니다.

예시

학생 이름을 수강 테이블마다 저장하면 이름 변경 때 여러 행을 고쳐야 합니다.

CHECK조회 요구가 강하면 의도적 비정규화도 검토한다.

GUIDED PRACTICE

수강 테이블 나누기

수강표에 학생 이름·학번·과목명·교사명·점수를 모두 한 줄에 저장했습니다.

  1. 학생 사실은 Student, 과목 사실은 Course로 분리합니다.
  2. Student와 Course의 관계·점수는 Enrollment에 둡니다.
  3. 각 테이블의 키와 외래 키로 연결합니다.
결론

한 사실을 한 곳에서 수정하게 되어 데이터 불일치 가능성이 줄어듭니다.

ACTIVE RECALL · 4 STEPS

가리고, 말하고, 확인하기

읽기만 하지 말고 답을 떠올린 뒤 펼쳐 보세요.

0/4 회상 완료

01 · 정의 회상

“기본 키”을(를) 보지 않고 한 문장으로 정의해 보세요.

02 · 비교 설명

“외래 키”이(가) 필요한 상황을 예시와 함께 설명해 보세요.

03 · 핵심 점검

조회 요구가 강하면 의도적 비정규화도 검토한다.

04 · 풀이 재현

“수강 테이블 나누기”의 결론을 보기 전에 풀이 순서를 3단계로 다시 적어 보세요.

WORKBOOK · STEP BY STEP

개념 확인 문제

정답을 고르고 해설로 사고 과정을 확인하세요.

기록 불러오는 중
01

행을 유일하게 식별하는 키는?

02

학생 테이블에 없는 학번의 수강 기록을 막는 제약은?

03

한 학생의 이름을 여러 수강 행에 저장할 때 생기기 쉬운 문제는?

SPEAK IT OUT

면접 1분 답변 연습

정규화의 목적과, 무조건 정규화만 하면 안 되는 이유를 설명해 보세요.

답변할 때는 정의 → 이유 → 짧은 예시 순서로 말해 보세요.

공식·표준 자료로 더 읽기

PostgreSQL · Constraints원문 열기 ↗기본 키·외래 키·제약 조건을 공식 문서로 확인합니다.