한 행에 여러 사실을 묶었을 때
학생·과목·교수를 한 테이블에 모으면
한 행이 수강 기록학생 정보, 과목 정보를 동시에 들고 있게 됩니다. 그래서 같은 값은 반복 저장되고, 한 번의 변경은 관련 없는 사실까지 함께 흔듭니다.
예시 테이블 · 학생 / 과목 / 교수를 한곳에 저장 같은 정보가 여러 행에 반복
학번 이름 과목명 교수 학과
1001 김철수 DB 이교수 컴공
1001 김철수 알고리즘 박교수 컴공
1002 이영희 DB 이교수 전자
한 행이 여러 엔터티를 동시에 대표
학생 1001의 정보와 DB 수강, 이교수 담당이라는 다른 사실이 한 줄에 묶입니다.
행을 바꾸면 여러 사실이 함께 변함
학생 정보만 고치고 싶어도 모든 수강 행을 찾아야 하고, 한 행 삭제가 과목 정보 소실로 이어질 수 있습니다.
문제
테이블에서 실제로 생기는 일
운영 결과
데이터 중복
같은 학생·학과 값이 과목 수만큼 반복됩니다.
김철수 / 컴공 같은 값이 여러 행에 다시 저장됩니다. 학생이 과목을 더 많이 들을수록 중복도 같이 늘어납니다.
저장 공간이 낭비되고, 학과나 이름이 바뀌면 중복된 모든 행을 함께 수정해야 합니다.
이상 현상
삽입·삭제·갱신이 한 사실만 바꾸지 못합니다.
학생이 아직 없으면 과목만 먼저 넣기 어렵고, 마지막 수강 행을 삭제하면 과목·교수 정보도 같이 사라질 수 있습니다.
한 번의 변경이 의도하지 않은 사실까지 건드려 무결성과 비즈니스 규칙을 쉽게 깨뜨립니다.
NULL 남발
행마다 필요 없는 칼럼이 비어 있게 됩니다.
어떤 행은 학생 정보만 필요하고, 어떤 행은 과목 정보만 필요해 관련 없는 칼럼에 NULL이 쌓입니다.
값이 비어 있는 이유를 해석하기 어려워지고, 테이블 의미가 흐려지며 저장 효율도 떨어집니다.