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 7361 게시물 읽기
No. 7361
배열과 FK
작성자
이리
작성일
2008-03-04 10:16
조회수
5,809

테이블 B에서 PK로 id를 사용하고 있습니다.

테이블 A에서는 배열 컬럼이 있는데, 이 배열의 원소를 B의 id로 FK 제약을 걸고 싶습니다.

예를 들어 B에 1, 2, 3 ... 10이 있으면,
A에 있는 배열컬럼은 [1, 2, 3]이 가능해야 하고 [11] 등은 불가능해야 한다는거죠.
또한 B의 1이 11로 바뀌는 경우 A에서 참조한 배열컬럼의 값들도 모두 1에서 11로 바뀌었으면 좋겠습니다.

그냥 

CREATE TABLE "A"
(
   "id" serial NOT NULL, 
   "b_pk" integer[] NOT NULL,
    PRIMARY KEY ("id"),
    FOREIGN KEY ("b_pk") REFERENCES "B" ("id")    ON UPDATE NO ACTION ON DELETE NO ACTION
) WITH (OIDS=FALSE)
;

뭐 이런 식으로 하니까 b_pk의 타입(integer[])과 B의 id의 타입(integer)가 달라서 에러가 나더군요.
어떤 좋은 방법이 없을까요?

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

A의 배열 칼럼을 독립 테이블 C 로 만드세요. 
그리고, 
A - C - B 형태의 전형적인 RDBMS 형태로 만들면 원하는 대로 될 것 같네요. 

그렇지 않고, A의 자료 구조를 고집하려고 한다면, 
FK 역할을 하는 트리거를 직접 만들어서, A, B 테이블에 각각 걸어주어야겠네요.

제가 보기에는 전자가 후자보다 비용이 적을 것 같습니다.

김상기(ioseph)님이 2008-03-04 11:00에 작성한 댓글입니다.

제약조건은 check constraint 사용하심 될거 같고요..

아니면 domain 만드시던지...


수정이나 삭제 문제는 간단한 rule 하나 걸어 두면 될거 같습니다.

물론 요소 삭제 펑션은 미리 만들어 놓는게 좋겠죠

tyro님이 2008-03-04 18:55에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
7366죄송합니다. update에서 질문있네요... [3]
임형구
2008-03-06
5553
7364DB 업그레이드하면서 데이타를 옮길려고 합니다. 인코딩 변경해서요. 고수님들 의견 부탁 드립니다. [2]
김대헌
2008-03-05
5791
7362시퀀스 문제 [1]
초짜군
2008-03-05
6176
7361배열과 FK [2]
이리
2008-03-04
5809
7360시퀀스 문제 [3]
초짜군
2008-03-01
6311
7353SET client_encoding='SJIS' 이것을 psql 이시작하면서 부터 클라이언트 인코딩을 이것으로 고정하려고하는데요 잘안되네요. [4]
김대헌
2008-02-29
6172
7352초짜입니다. 고수님들 도움을... [2]
임병민
2008-02-29
5770
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다