[postgresql] 각각 외래 키인 요소의 PostgreSQL 배열

내 앱에 대한 DB를 만들려고 시도하고 있는데 가장 좋은 방법을 찾고 싶은 것은 Users나와 Items테이블 사이에 일대 다 관계를 만드는 것 입니다.

나는 세 번째 테이블을 만들 수 있습니다 알고 ReviewedItems, 그리고 열이 할 수있는 UserID와 ItemID, 그러나의 열을 할 수 있는지 나는 알고 싶습니다 Users의 말을하자, reviewedItems외국 키가 포함 된 정수 배열 인 Items것을 을 User검토하고있다.

PostgreSQL이이 작업을 수행 할 수 있다면 알려주세요! 그렇지 않다면 세 번째 테이블 경로로 내려갈 것입니다.



답변

아니요, 불가능합니다.

PostgreSQL은 적절하게 정규화 된 데이터 모델에서 가장 효율적으로 작동 하는 관계형 DBMS입니다. 배열은 정의에 따라 정렬 된 집합입니다. 관계형 데이터 구조가 아니므로 SQL 표준은 배열 요소에 대한 외래 키 정의를 지원하지 않으며 PostgreSQL도 지원하지 않습니다.

그러나 다른 테이블의 기본 키에 연결되는 배열 요소를 사용하여 완벽하게 정밀한 데이터베이스를 구축 할 수 있습니다. 그러나 이러한 배열 요소는 외래 키로 선언 할 수 없으므로 DBMS는 참조 무결성을 유지하지 않습니다.


답변

곧 이것을 할 수있을 것입니다 : https://commitfest.postgresql.org/17/1252/-Mark Rofail이이 패치에 대해 훌륭한 작업을하고 있습니다!

패치는 (완료되면)

CREATE TABLE PKTABLEFORARRAY (
    ptest1 float8 PRIMARY KEY,
    ptest2 text
);
CREATE TABLE FKTABLEFORARRAY (
    ftest1 int[],
    FOREIGN KEY (EACH ELEMENT OF ftest1) REFERENCES PKTABLEFORARRAY,
    ftest2 int
);

그러나 작성자는 현재 패치를 리베이스하는 데 도움이 필요하므로 (내 능력을 넘어서) Postgres 내부를 아는이 글을 읽는 사람은 가능한 경우 도움을 주시기 바랍니다.


답변