외래키(foreign key) 이야기만 나오면,
처음 RDBMS를 만지던 그때의 그 끔찍했던 기억이 납니다.
책을 읽어도 이게 무신 소린지도 모르겠고,
다 읽고 나서도 "그래서, 어떻게 하라는 것인지?"라는
되려 질문만 생기고.
아마, 이 글을 쓰신 분도 그때의 저같은 심정인가 봅니다:)
primary key, foreign key, join, union 이 개념들은
RDBMS의 핵심입니다.
RDBMS의 그 R에서 쓰이는 Relation의 구현이 바로 윗 개념들로 구현이
되기 때문입니다.
한 테이블은 사원번호와 사원이름이 있는 테이블이고,
다른 테이블은 그 사원의 매달 급여명세 정보가 있는 테이블이 있다고 했을때,
사원테이블은
사원번호: 사원이름
이렇게 구성될터이고,
급여테이블은
사원번호: 급여일: 급여금액
이렇게 구성되겠지요.
foreign key는 바로 급여테이블에서 사용됩니다.
일반적으로 사용되는 방법은 constraint라는 코스에서 지정을 하는데,
우리말로 풀어보면,
"급여테이블에서 사용하는
1. 사원번호는 *반드시* 사원테이블의 사원번호를 사용해야하고,
2. 만일 사원테이블의 사원번호가 변경되면
급여테이블의 사원번호도 함께 바뀌어야하고,
3. 사원테이블의 사원번호가 삭제되면,
급여테이블 해당 사원번호의 급여정보도 삭제한다"
이런 작업들을 해내는 것이 바로 급여테이블에서의
사원번호를 foreign key로 지정하는 것입니다.
///////////
간단히 생각해서,
MySQL 같이 이런 외래키와, constraint 코스 개념이 없는 RDBM이라면,
이런 것들을 프로그램 차원에서 일일히 레코드 계산을 하면서
처리를 해야겠지요.
제대로 된 RDBM 이라면 이런 것들을 DB 서버 차원에서 제공해 주어야합니다.
///////////
foreign key를 사용하고자 한다면,
DB 전문자가들은 제일 먼저 이야기하는 것이 속도와 퍼포먼스입니다.
상식적으로 생각하도 이것을 사용하게 된다면,
속도도 떨어질 터이고, 퍼포먼스도 그만큼 올라가기 때문이겠지요.
하지만, 그런 손해를 보고도 얻는 이익이 더 크다면, 당연히 이것을 써야겠지요.
그럼 언제, constraint 코스를 설정할고, foreign key 등록을 하고,
사용할 것인가? 이것은 뚜렷한 답이 없습니다.
물론 윗 예제처럼 대략적인 예제를 들어 설명을 할 수는 있겠지만,
세상 사는 일이 다 그렇듯이 "반드시 이거다"는 식은 아니니....
결국 DBA의 능력에 달려있는게지요.
많은 테이블을 만들어 보고, 그 관계를 규정지어보면서
경험속에서 나오는 것이 제일 믿음직합니다.
/////////
지금까지 쓰면서 구체적으로 SQL 구문에 대해서는 하나도 설명을
하지 않았는데,
이것의 실제 SQL 구문은 PostgreSQL의 CREATE 명령 설명서를 참조하십시오.
>>궁금한사람 님께서 쓰시길<<
:: 안녕하세요? 여기서 신세를 많이 지고 있는 사람인데요..
::
:: Foreign key에 대해서 정확히 모르고 있어서..7.0부터 지원을 한다는데..
:: 어떤 때 필요하고, 사용방법은 어떻게 되는지 알려주시면
:: 고맙겠습니다.
::
:: 그런데 이 질문..좀 쑥스럽군요..제 능력의 한계를 드러내는 것 같아..
|