ER 예시 → 릴레이션 변환

한 ER 모델이 속성 성격에 따라 서로 다른 테이블로 나뉜다

학생을 중심으로 보면, 복합 속성은 컬럼으로 펼치고, 다중값은 별도 릴레이션으로 빼며, 관계 속성은 관계 테이블 안에 저장합니다.

핵심 읽기
주소는 students 안에서 분해되고, 전화번호와 수강 정보는 밖으로 분리됩니다.
공통 중심
ER에서 보이는 것
관계형 결과
학생
하나의 개체 안에 단순 속성, 복합 속성, 다중값 속성, 다른 개체와의 관계가 함께 들어 있습니다.
#학번 이름 주소(시, 구, 동) 전화번호*
같은 학생에서 출발해도, 값의 성격이 다르면 저장 위치도 달라집니다.
복합 속성

주소(시, 구, 동)

주소를 한 칸에 넣기보다 하위 속성으로 나누면 검색과 정렬이 쉬워집니다.

students
student_id | name | city | district | dong
다중값 속성

전화번호 여러 개

한 학생이 여러 번호를 가질 수 있으므로, 값마다 한 행씩 저장할 별도 릴레이션이 필요합니다.

student_phones
student_id | phone
M:N 관계 + 관계 속성

학생 ─ 수강 ─ 과목

수강은 학생과 과목을 잇는 관계 자체이므로 새 테이블이 되고, 성적·수강일도 그 안의 컬럼으로 들어갑니다.

courses
course_id | title
enrollments
student_id | course_id | grade | enrolled_at
읽는 순서: 학생 엔터티를 먼저 보고, 어떤 값이 같은 행에 남는지, 어떤 값이 별도 릴레이션으로 빠지는지 구분하면 이어지는 SQL이 바로 연결됩니다.