인프런 커뮤니티 질문&답변
Subject 테이블과 Lecture 테이블 질문드립니다.
작성
·
222
1
요구사항에서 과목은 학년별로 담당선생님이 따로 있다.
"과목은 '학년별로'" 이 부분에서, 강의에서는 Subject를 마스터 테이블로 만들고, OpenLecture 관계 테이블에 GradeId 를 외래키로 썼더라구요. 혹시 이 부분에서 Grade를 OpenLecture 테이블이 아닌 Subject 테이블의 외래키로 설정하고, SubjectId 랑 GradeId를 묶어서 PK로 선언하고 Subject 테이블의 PK를(GradeId, SubjectId) OpenLecture 테이블의 외래키로 설정해도 상관 없을까요?
컬럼 수로만 따지면 변경사항은 없으나 관계 매핑에서 차이가 좀 있더라구요.
항상 좋은 강의 감사드립니다.
퀴즈
관계형 데이터베이스에서 1:M 관계를 구현할 때, 부모 테이블과 자식 테이블 간의 연결은 주로 무엇을 통해 이루어지나요?
부모 테이블의 Foreign Key를 자식 테이블에 사용
자식 테이블의 Primary Key를 부모 테이블에 사용
부모 테이블의 Primary Key를 자식 테이블의 Foreign Key로 사용
두 테이블 모두에 새로운 Unique Key 추가
답변 1
2
상관 없겠죠. 그러나 중요한 것은 정규화를 생각해야 합니다. Grade가 어느 테이블의 속성에 있는 것이 맞는가를 정확하게 고려해야 합니다. PK, FK구성에는 문제가 없지만 있어야 할 테이블에 없다면 비즈니스 로직을 구현하는데 문제가 되겠죠. 물론 이래도 되고 저래도 되는 경우도 있습니다. 그런 경우는 쉽지만 찾아보기 힘들죠.
Subject가 복잡해지면 나중에 확장성이 크게 떨어집니다. 즉 Subject가 어느 학년에 적용될지 예측할 수 있나요? 만약 Subject의 학년이 바뀌게 되면 일이 생깁니다. 즉, 마스터는 스스로 존재하는 것이기 때문에 그 성격이 바뀌지를 않습니다. 물론 키의 설계가 그렇다는 것이지요. 그런데 Grade가 바뀌어야 하는 상황이 될 수도 있겠군요. 테이블 설계 시 필요 이상의 속성과 키를 갖는 다는 것은 그만큼 부담이 되는 것을 의미하며, 확장성이 현저하게 떨어집니다. 그래서 정규화를 공부해보면 왜 테이블은 최소의 단위로 쪼개져야 하는지 명확하게 알 수 있습니다.





