DATABASE · CHAPTER 01
기초 · 45분관계형 모델과 정규화
데이터를 한 번만, 관계는 명확하게
키와 관계를 설계하고 중복이 만드는 갱신 이상을 설명한다.
CONCEPTS
개념을 문장으로 설명하기
기본 키
각 행을 유일하게 식별하는 값입니다.
예시
student_id가 같으면 같은 학생 행을 가리켜야 합니다.
CHECK이름은 중복될 수 있으므로 좋은 기본 키가 아닐 수 있다.
외래 키
다른 테이블의 기본 키를 참조해 관계를 표현하는 열입니다.
예시
enrollment.student_id가 student.id를 참조합니다.
CHECK존재하지 않는 학생의 수강 기록을 막을 수 있다.
정규화
중복과 갱신 이상을 줄이기 위해 사실을 적절한 테이블로 분리하는 설계 과정입니다.
예시
학생 이름을 수강 테이블마다 저장하면 이름 변경 때 여러 행을 고쳐야 합니다.
CHECK조회 요구가 강하면 의도적 비정규화도 검토한다.
GUIDED PRACTICE
수강 테이블 나누기
수강표에 학생 이름·학번·과목명·교사명·점수를 모두 한 줄에 저장했습니다.
- 학생 사실은 Student, 과목 사실은 Course로 분리합니다.
- Student와 Course의 관계·점수는 Enrollment에 둡니다.
- 각 테이블의 키와 외래 키로 연결합니다.
결론
한 사실을 한 곳에서 수정하게 되어 데이터 불일치 가능성이 줄어듭니다.
ACTIVE RECALL · 4 STEPS
가리고, 말하고, 확인하기
읽기만 하지 말고 답을 떠올린 뒤 펼쳐 보세요.
01 · 정의 회상
“기본 키”을(를) 보지 않고 한 문장으로 정의해 보세요.
02 · 비교 설명
“외래 키”이(가) 필요한 상황을 예시와 함께 설명해 보세요.
03 · 핵심 점검
조회 요구가 강하면 의도적 비정규화도 검토한다.
04 · 풀이 재현
“수강 테이블 나누기”의 결론을 보기 전에 풀이 순서를 3단계로 다시 적어 보세요.
WORKBOOK · STEP BY STEP
개념 확인 문제
정답을 고르고 해설로 사고 과정을 확인하세요.
01
행을 유일하게 식별하는 키는?
02
학생 테이블에 없는 학번의 수강 기록을 막는 제약은?
03
한 학생의 이름을 여러 수강 행에 저장할 때 생기기 쉬운 문제는?
SPEAK IT OUT
면접 1분 답변 연습
정규화의 목적과, 무조건 정규화만 하면 안 되는 이유를 설명해 보세요.
답변할 때는 정의 → 이유 → 짧은 예시 순서로 말해 보세요.공식·표준 자료로 더 읽기
PostgreSQL · Constraints원문 열기 ↗기본 키·외래 키·제약 조건을 공식 문서로 확인합니다.