내 앱에 대한 DB를 만들려고 시도하고 있는데 가장 좋은 방법을 찾고 싶은 것은 Users
나와 Items
테이블 사이에 일대 다 관계를 만드는 것 입니다.
나는 세 번째 테이블을 만들 수 있습니다 알고 ReviewedItems
, 그리고 열이 할 수있는 User
ID와 Item
ID, 그러나의 열을 할 수 있는지 나는 알고 싶습니다 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 내부를 아는이 글을 읽는 사람은 가능한 경우 도움을 주시기 바랍니다.