는이 전복합 키, 외래 키
TABLE subgroups (
group_id t_group_id NOT NULL REFERENCES groups(group_id),
subgroup_name t_subgroup_name NOT NULL,
more attributes ...
)
subgroup_name
는group(group_id)
에 고유 한 다음과 같은 테이블이 있다고 가정 해 봅시다.group
은 많은subgroups
을 가질 수 있습니다.subgroup_names
은 사용자가 제공 한 것입니다. (나는subgroup_id
컬럼을 사용하는 것을 피하고 싶다 .은 모델에서 의미를 가지며 단순한 레이블 이상이다. 나는 미리 정해진 이름의 목록을 제공하고 있지만 사용자가 유연성을 위해 자신의 것을 추가 할 수 있도록 허용한다.)- 이 테이블에는 하위 그룹 속성 (다 대일 관계가 있음)을 포함하는 참조 수준 하위 테이블이 2 개 있습니다.
나는에 PRIMARY KEY하고 싶은 (GROUP_ID을, 상단 (트림 (subgroup_name)));
내가 아는 바로는 postgres는 PRIMARY KEY/UNIQUE를 함수에 사용할 수 없습니다. IIRC에서 관계형 모델은 열을 저장된 것으로 사용해야합니다.
CREATE UNIQUE INDEX ON subgroups (group_id, upper(trim(subgroup_name)));
내 모델의 다른 테이블에 두 개의 열을 가리키는 외부 키가 있으므로이 문제를 해결할 수 없습니다.
두 가지 옵션이 있습니다.
옵션 A)
- 스토어 subgroup_name
- 의 정리 하위 그룹 이름은 세척 할 문자열
옵션 B)
-
를 포함 할 여분의 열라고 subgroup_name_raw 추가
- 내 키 쌍에 고유 인덱스와 기본 키를 모두 작성하십시오. (거대한 쓰레기처럼 보인다)
어떤 통찰력이라도 있습니까?
참고 : 나는 실제로 당신이 함수의 출력에 UNIQUE 제약 조건을 수행 할 수
왜 subgroup_name의 정리되지 않은 버전을 저장 하시겠습니까? 나는 너의 생각을 이해하려고 노력하고있어. 분명히 그룹 + 하위 그룹 ID의 깨끗한 버전과 표시 이름을 제공하는 조회 테이블이 있습니다. –
정리되지 않은 버전을 사용자 인터페이스에 표시하고 싶습니다. 나는 대문자 버전을 표시하고 싶지 않을 것이고 그 이름이 대소 문자가 구별되지 않는지 확인하고 싶습니다. 하위 그룹 회원, 메시지와 연결된 다른 개체를해야합니다. 이러한 오브젝트를 포함하는 테이블에는 서브 그룹 테이블에 대한 외부 키가 있습니다. 나는 subgroup_id에 동등하게 깨끗한 subgroup_name를 참조하십시오. 이 사용자 표시의 경우 – akp
그래서, 당신은 어쨌든 조회 테이블에 넣고 싶을 것이다. 그들은 아마 어떤 시점에서 display-name을 변경하기를 원할 것입니다. 그들은 항상 그렇습니다. –