님의 명쾌한 답변에 감사드립니다.
그러니까..트리거 비슷한 개념으로 Relation관계에 있는 두 테이블이 해당
row간에 속박되어 있음을 말하는 것 같네요..
단순히 그것이라면..지금까지는 프로그램 코드에서 생노가다로 줄창하던
일인데..이걸(foreign key) 지원하는 RDBMS는 엔진 자체에서 지원한다는
이야기인가요?
그리고 지원이라면..자동 update, 자동 delete연산이 일어난다는 얘기인가요?
그렇다면 정말 편한 일이겠군요..
>>김상기 님께서 쓰시길<<
:: 외래키(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부터 지원을 한다는데..
:: :: 어떤 때 필요하고, 사용방법은 어떻게 되는지 알려주시면
:: :: 고맙겠습니다.
:: ::
:: :: 그런데 이 질문..좀 쑥스럽군요..제 능력의 한계를 드러내는 것 같아..
|