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 8846 게시물 읽기
No. 8846
배열과 Foreign Key 의 관계에 대해서
작성자
tyro
작성일
2011-09-28 12:39ⓒ
2011-09-28 12:45ⓜ
조회수
8,432

 

일반적으로 PK 혹은 AK (unique key) 에 대해서

이럴 탐조하는 컬럼은 FK 로 정의할 수 이쓴데요..

 

이 FK 컬럼에 대한 데이타는 내부적으로 참조컬럼에서 해당값이 있나는 채크해서 입력하게 되는데요

만일 없는 값이 나오면 에러를 내겠고요..

 

 

이런 원리로

 

PK 는 일반 컬럼이고 FK 컬럼은 배열컬럼으로 PK 의 값들이 요소로 들어갑니다.

 

이 배열 요소요소들은 모두가 PK 값이 존재해야 하는 그런 구조라고 할때

 

이럴 FK 처럼 내부적으로 동작하게 할 수 있는 좋은 방법이 없을까요?

 

어쩔수 없이 함수로 만들어 이럴 채크하게 하는 check constraint 형태로 제약을 거는 수 밖에 없는 건가요?

 

그리고 CASCADE 문제는 또 어찌 하는게  좋을까요.. 그럼 아예 트리거를 만들어야 하는 것일까요...?

 

FK 처럼 좀 깔끔한 방법이 여엉 떠오르질 않는군요.

 

(물론 별도 테이블로 구성하여 일반컬럼으로 만들면 되긴 합니다만 그런거 말고요....

 

 

이 글에 대한 댓글이 총 3건 있습니다.

' 이럴 FK 처럼 내부적으로 동작하게 할 수 있는 좋은 방법이 없을까요?'

이게 무슨 뜻인지 모르겠네요...   enum 타입을 예기 하는건가요?

CASCADE 문제는 FK 를 사용하지 않는다면 트리거나 App 에서 처리해야할 문제같네요..

1님이 2011-09-29 10:11에 작성한 댓글입니다. Edit

예제를 가져왔었으면 좋았을텐데.. 그냥 글로 써 놓으니 이해가 좀 잘 안 되었나 봅니다.

 

PK, ARR 두개의 컬럼이 있다 치고

 

1 null

2 {1}

3 {1, 2}

4 {2}

5 { 1, 7}

 

현재 4번 레코드 까지는 해당 배열요소가 PK 에 있으므로 저장이 잘 됩니다.

하지만 5 번의 경우는 1 은 있으나 7 이 없기 때문에 제약조건 걸려 입력이 안 되게 하는 겁니다.

 

꼭 FK 처럼 배열 요소를 각각 다 채크 하는거지요

 

그리고 CASCADE 문제는

만일 위의 4 까지 데이타 중에서

2 번을 10 으로 변경 한다면

3번과 4 번 레코드의 배욜 요소중 2 가 자동으로 10 으로 변경 됨을 말하며

만일 삭제를 하게 된다면

역시 이 배열요소를 자동 제거 해 주는 것을 말합니다.

 

결국 BOM 으로 처리할 수 밖에 없나 봅니다...

아니면 제약조건은 함수로 걸고.. CASCADE 는 트리거를 걸어 처리하던지...

 

tyro님이 2011-09-29 12:41에 작성한 댓글입니다.
이 댓글은 2011-09-29 12:46에 마지막으로 수정되었습니다. Edit

 table check() 제약조건에서 현재 입력되는 것이 다른 로우에 있는가?를 참조하는 식은 사용자 정의 함수를 만들지 않고서는 불가능합니다. 

또한 delete 처리, update 처리를 함께 고려한다면, 결국 트리거로 만들 수 밖에 없겠네요.

김상기(ioseph)님이 2011-09-29 17:01에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
8850win7 에사용될 가장 안정된 버젼 추전좀 부탁합니다.
RDBA
2011-10-07
8350
8848to_char 결과값이 다르게 나옵니다. [2]
이기자
2011-09-29
8028
8847N - gram 전체 텍스트 검색 사용해보신분 계신지요? [4]
열심히
2011-09-29
8698
8846배열과 Foreign Key 의 관계에 대해서 [3]
tyro
2011-09-28
8432
8845invalid byte sequence for encoding 이런 애러가 납니다. [1]
나종현
2011-09-27
9768
8842copy 파일을 프로그램상에서 처리를 하려는데요.. [1]
오성진
2011-09-14
7989
8840Vacuum과 Dump 의 동시실행 [1]
박병훈
2011-08-31
8428
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다