database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 2047 게시물 읽기
No. 2047
Re: Foreign key에 대한 잡생각
작성자
김상기
작성일
2000-12-23 21:04
조회수
7,978

외래키(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부터 지원을 한다는데..

:: 어떤 때 필요하고, 사용방법은 어떻게 되는지 알려주시면

:: 고맙겠습니다.

::

:: 그런데 이 질문..좀 쑥스럽군요..제 능력의 한계를 드러내는 것 같아..

[Top]
No.
제목
작성자
작성일
조회
2056[질문] VACUUM 이 안되요...
초보
2000-12-26
8174
2060┕>Re: [질문] VACUUM이 안되면, dump, drop, recreate 하세요.
김상기
2000-12-27 01:13:25
8948
2063 ┕>Re: Re: [질문] dump 도 안되네요....
초보
2000-12-27 12:54:01
8582
2071  ┕>Re: PostgreSQL에서의 손상된 테이블에 대한 대처 방안.
김상기
2000-12-27 21:28:06
9718
2053PHP3에서 pg_connect와 pg_pconnection의 차이점은?
반포지효
2000-12-24
7900
2061┕>Re: PHP3에서 pg_connect와 pg_pconnection의 차이점은?
김상기
2000-12-27 01:20:00
8453
2048pgsql유저의 패쓰워드는 무엇인가요?
이재호
2000-12-23
7901
2049┕>Re: pgsql유저의 패쓰워드는 무엇인가요?
엠브리오
2000-12-24 01:40:20
11631
2050 ┕>Re: Re: pgsql유저의 패쓰워드는 무엇인가요?
이재호
2000-12-24 01:55:28
7690
2051 ┕>Re: Re: 시스템 user와, db user
김상기
2000-12-24 02:10:17
7117
2052  ┕>김상기님 정말 감사 드립니다.!!
이재호
2000-12-24 02:21:53
7942
2046Foreign key란 무엇이고, 사용하는 방법은?
궁금한사람
2000-12-23
7897
2047┕>Re: Foreign key에 대한 잡생각
김상기
2000-12-23 21:04:05
7978
2054 ┕>Re: Re: Foreign key에 대한 잡생각
궁금한이
2000-12-25 20:45:29
7437
2055  ┕>Re: 메뉴얼이 제일 좋은 지침서입니다.
김상기
2000-12-26 02:09:45
7838
2058  ┕>Re: Re: Re: Foreign key에 대한 잡생각
김윤한
2000-12-26 23:21:17
7416
2045요상한 에러....
박근익
2000-12-23
6797
2069┕>Re: 요상한 에러....
정재익
2000-12-27 20:47:32
6970
20431byte 숫자를 전각문자로 바꾸는 함수를 올렸습니다.
김상기
2000-12-22
6748
2044┕>Re: 1byte 숫자를 전각문자로 바꾸는 함수를 올렸습니다.
정재익
2000-12-23 09:27:40
6962
2040시간을 비교하고 싶은데..
최우석
2000-12-21
5875
2041┕>Re: timestamp 값에 대한 연산. [1]
김상기
2000-12-21 20:34:10
11112
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다