반복 그룹

같은 속성을 컬럼으로 늘리면 구조가 먼저 막힙니다

수강과목 하나를 과목1, 과목2, 과목3처럼 반복 컬럼으로 저장하면, 학생 정보보다 컬럼 개수가 과목 수를 대신 표현하게 됩니다.

반복 그룹이 들어간 테이블
학번
이름
과목1
과목2
과목3
1001
김철수
DB
알고
NULL
1002
이영희
DB
NULL
NULL
실제로는 하나의 속성
수강과목

하지만 같은 의미를 가진 값을 새 컬럼으로 계속 늘려 두었기 때문에, 데이터가 늘 때마다 구조까지 함께 흔들립니다.

반복 그룹이 만드는 문제
관점
무슨 일이 생기나
예시
확장
최대 과목 수가 컬럼 수에 묶입니다. 과목이 더 늘면 데이터 추가가 아니라 스키마 변경이 먼저 필요합니다.
새 과목 추가
`과목4` 컬럼을 또 만들어야 함
저장
듣지 않는 과목 자리까지 칸을 만들어 두어야 해서 NULL이 쉽게 쌓입니다.
1002 행
과목2, 과목3가 비어 있음
검색
같은 뜻의 컬럼을 모두 확인해야 하므로, 조건식이 길어지고 빠뜨리기 쉬워집니다.
WHERE 과목1 = 'DB'
   OR 과목2 = 'DB'
   OR 과목3 = 'DB'
핵심: 과목 수는 컬럼 수로 표현할 것이 아니라 행 수로 표현해야 합니다. 그래서 1NF에서는 반복 컬럼을 없애고, 각 셀에 하나의 값만 남도록 테이블을 분리합니다.