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 2054 게시물 읽기
No. 2054
Re: Re: Foreign key에 대한 잡생각
작성자
궁금한이
작성일
2000-12-25 20:45
조회수
7,435

님의 명쾌한 답변에 감사드립니다.

그러니까..트리거 비슷한 개념으로 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부터 지원을 한다는데..

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

:: :: 고맙겠습니다.

:: ::

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

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