문제

다른 열을 참조하는 더 많은 열이있을 때, 나는 참조 무결성을 유지하면서 그 열을 업데이트하는 가장 좋은 방법으로 고군분투하고 있습니다. 예를 들어, 레이블 및 설명 테이블과 두 개의 항목이있는 경우 다음과 같습니다.

Label | Description
------------------------------------
read  | This item has been read
READ  | You read this thing already

이제이 중복을 원하지 않습니다. 예제에서와 같이 케이스 비면적으로 복제 된 값을 허용하지 않는 열에 제약 조건을 추가하고 싶습니다. 그러나 나는 '읽기'를 참조하는 몇 개의 다른 테이블의 몇 줄을 가지고 있습니다.

나는 Postgres가 다른 행의 어떤 필드가 이것을 참조하는지 알고 있다는 것을 알고 있습니다. 그렇다면 '읽기'로 업데이트하도록 이것을 참조하는 필드를 어떻게 얻을 수 있습니까? 이것은 단지 예일뿐입니다. 실제로 나는 이것을하고 싶은 곳이 몇 개 있습니다. 또 다른 예는 실제로 몇 개의 테이블에 대한 int 기본 키입니다. 여기서 기존 테이블이 확장되는 일종의 '기본 테이블'으로 새 테이블을 추가하려고하므로 이제 고유 한 ID가 필요하므로 업데이트를 의미합니다. 그들이 가진 것들.

나는 이것을 추가 할 수있는 기능, 내가 활용할 수있는 도구 또는 다른 기능에 대한 레시피에 열려 있습니다.

도움이 되었습니까?

해결책

참조를 많이 읽는 행이있는 경우 외국 키를 캐스케이드 업데이트로 변경할 수 있습니다. 해당 테이블 세트 레이블 = '읽기'를 업데이트하면 모든 것이 자동으로 고정됩니다. 그 후에는 이전과 마찬가지로 제약 조건을 다시 변경할 수 있습니다.

열을 참조하는 모든 테이블을 찾으려면 사용할 수 있습니다.

select TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME from 
INFORMATION_SCHEMA.KEY_COLUMN_USAGE where
REFERENCED_TABLE_NAME = '<table>' AND REFERENCED_COLUMN_NAME = '<column>'

다른 팁

미래를 위해 "레이블"열에서 고유 한 인덱스를 만들 수 있습니다.

CREATE UNIQUE INDEX index_name ON table ((lower(label)));

또는 확인하십시오 수동. 다음 번 에이 상황을 피하는 데 도움이됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top