programing

각각 외부 키인 요소의 PostgreSQL 배열

minimums 2023. 5. 3. 20:53
반응형

각각 외부 키인 요소의 PostgreSQL 배열

앱을 위한 DB를 만들려고 하는데, 가장 좋은 방법을 찾고 싶은 것은 앱 사이에 일대일 관계를 만드는 것입니다.Users그리고.Items테이블

제가 세 번째 테이블을 만들 수 있다는 것을 압니다.ReviewedItems그리고 기둥들을 bea.User이드 앤 앤Itemid, 하지만 칼럼을 만드는 것이 가능한지 알고 싶습니다.Users가령reviewedItems이것은 외부 키를 포함하는 정수 배열입니다.Items그것은User검토했습니다.

이프 포스트그레SQL에서 할 수 있습니다. 알려주세요!그렇지 않다면 세 번째 테이블 루트를 따라 가겠습니다.

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 내부 정보를 아는 사람은 가능하다면 도와주세요.

아니요, 이것은 불가능합니다.

PostgreSQL은 적절하게 정규화된 데이터 모델에서 가장 효율적으로 작동하는 관계형 DBMS입니다.배열은 관계형 데이터 구조가 아니며(정의상 집합) SQL 표준은 배열 요소에 대한 외부 키 정의를 지원하지만 PostgreSQL은 현재 이를 지원하지 않습니다.(휴게소?)가 있습니다.2021년 2월 이후 커밋페스트에 대한 활동 없음). 이를 구현하기 위한 노력 - 동일한 질문에 대한 답변을 참조하십시오. 그래서 언젠가는 이 기능이 지원될 수 있습니다.

그러나 당분간은 다른 테이블의 기본 키에 연결되는 배열 요소로 완벽하게 미세한 데이터베이스를 구축할 수 있습니다.그러나 이러한 배열 요소는 외부 키라고 선언할 수 없으므로 DBMS는 참조 무결성을 유지하지 않습니다.적절한 트리거 세트(참조된 테이블과 참조 테이블 모두에서)를 사용하면(둘 중 하나의 변경이 확인 및 다른 테이블에 대한 업데이트를 트리거해야 하므로) 원칙적으로 어레이 요소에 대한 참조 무결성을 구현할 수 있지만, 성능이 뛰어나지는 않습니다(인덱스가 사용되지 않기 때문에).예를 들어).

언급URL : https://stackoverflow.com/questions/41054507/postgresql-array-of-elements-that-each-are-a-foreign-key

반응형