인프런 커뮤니티 질문&답변

my_it_story님의 프로필 이미지
my_it_story

작성한 질문수

데이터베이스 중급(Modeling)

도서대출관리 연습문제 2

강사님. PK를 상속하는 구조가 많이 사용되어 지는지 여쭤보고 싶습니다.

작성

·

267

2

안녕하세요. 

이교준 강사님

우선 데이터베이스 설계 부분에 관심이 생겨 강의를 찾아보다 우연히 강의를 수강하게 되었는데 강의 퀄리티가 좋아서 기분이 좋습니다. 감사합니다!

데이터베이스 설계를 학습하기 전에도 간단한 구조는 나름
데이터베이스를 공부하면서 익힌 원리를 적용해서 작성을 하고는 했었는데 저의 경우 일반적으로 Id라는 컬럼을 생성해서 PK를 주고 시작하는 형태로 설계를 해왔습니다. 

그리고 일대다 컬럼을 찾아 관계를 매핑시킬 떄도 생각없이
Id를 외래키로 가져오는 형식을 사용했습니다.

제가 궁금한점은 Id를 외래키로써 가져오면서 동시에 PK로 사용하는 구조 (말씀하시길 PK 상속구조)를 많이 사용하는지 여쭤보고 싶습니다.

예를들어 연습문제와 비슷한  회사 부서 팀이 있다면 이러한 구조에서도 아래와 같이 사용하는게 유용할지 여쭤보고 싶습니다.
회사 테이블의 경우 회사Id (PK)
부서 테이블의 경우 회사Id(FK/PK), 부서Id (PK)
팀 테이블의 경우 회사Id(FK/PK), 부서Id(FK/PK), 팀Id(PK)

 제가 언제나 조금 불편하게 생각했던 부분이 
1 : M 독립형 구조로 가게되면 예를들어 학생의 경우 학생은 반 테이블과 조인해서 반정보를 가져오고 또 반 테이블과 조인한 정보를 토대로 학년을 조인해서 학년 정보를 가져오는 부분인데  - (1학년 1반 누구누구)

강사님이 사용하신 PK 상속 구조를 사용하게되면 학생에서 그냥 반 테이블과 학년 테이블에 각각 조인시켜주면 되는 구조라서 되게 효율적으로 보여서 질문드립니다

답변 1

5

이교준님의 프로필 이미지
이교준
지식공유자

질문 감사합니다. 우선 PK와 FK는 서로 관계가 없습니다. Id가 PK역할만 해도 되고, 동시에 FK 속성을 갖아도 됩니다. 질문하신 상속관계는 상상 그 이상으로 사용이 됩니다. 회사,부서,팀의 경우 가장 전형적인 케이스가 됩니다. 그러나 회사라는 조직을 생각해 보세요. 실전에서는 회사를 관리하기 위해서 몇 개의 컬럼이 사용될까요?

총무부, 인사부, 재무부, 영업부, 경영, 등등 보는 각도에 따라서 관리하고 싶은 항목들이 수도 없이 많겠지요. 그렇다고 컬럼을 수 백개로 설계를 해 놓으면 성능에 문제가 발생할 수 있습니다. 이 문제를 해결하기 위해서 1:1 부부관계가 등장합니다.

즉, 공통적으로 자주 사용되는 중요 컬럼들을 회사 테이블에 정의합니다. 그리고 특정 부서에서 가끔 사용되는 많은 컬럼들은 별도의 테이블로 만들고 둘은 1:1의 관계를 갖게 됩니다. 그러면 평상시에는 회사 테이블의 몇개 안되는 컬럼들만 가져오다가 별도 테이블의 내용이 필요하게 되면 단순히 조인해서 가져오면 되겠지요.

실전에서 1:1 관계를 사용하지 않고 설계를 한다면 70%정도밖에 못할 정도로 많이 사용됩니다. 1:1 역시 부모가 있고 자식이 있지요. 그래서 이것도 상속의 관계로 봐야 합니다.

많은 1:M 상속의 관계를 설계하면 프로그래머들이 조금 싫어하지요. 그것을 해결하는 것은 저장프로시저, 뷰 등을 제공하는 방법으로 해결이 가능합니다. 특히 뷰의 경우 늘상 사용해야 하는 조인문을 간단하게 단일 테이블을 조회하는 방식으로 프로그래머들에게 제공하기 때문에 읽기 목적으로 사용하는 경우에는 정말 유용합니다.

상속의 관계가 아니라 각각 Id로 PK를 가져가게 되면 역시 무결성 원칙에 어긋나게 되겠죠. 부모 없는 자식은 어떤 문제를 일으킬지 아무도 모릅니다.

my_it_story님의 프로필 이미지
my_it_story

작성한 질문수

질문하기