나는 t_a, t_b, t_c와 같은 테이블 스페이스에 여러 개의 테이블을 가지고 있습니다. 각각 필드 이름이 profile_id입니다.이 테이블에 대해 고유 키를 생성하는 좋은 방법이 있습니까?postgreSQL의 데이터베이스 전역 고유의 비즈니스 키
1
A
답변
2
당신이 묘사하려는 사람들은 대부분 uuid
키를 사용합니다. 유용한 UUID 생성 기능을 보려면 ossp-uuid
확장을 참조하십시오.
또 다른 대안은 nextval
에서 키를 가져 오는 단일 시퀀스를 갖는 것입니다. 모든 키 입력란은 bigint
이되고 싶어합니다. 그냥 CREATE SEQUENCE business_object_key_seq;
.
위의 경우 모두 복잡한 트리거를 사용하지 않고 전역 고유성을 적용 할 수 없습니다. 둘 중 어느 것도 중복 키를 생성하지는 않으므로 코드가 어리석은 일을하지 않는 한 중복을 얻지는 못하게 될 것이며 주어진 테이블 내에서 여전히 고유성을 적용 할 수 있습니다.
일부 사용자가 사용하는 또 다른 접근법은 생성 된 기본 키와 그 밖의 아무것도없는 테이블 또는 'object_kind'필드 일 수 있습니다. 이것은 외래 키 참조의 역할을 할 수 있습니다. 이처럼 보일 수도 있지만 고유성을 강화할 수 있습니다. 실제로는 id = 42 인 행이 t_a
및 t_b
에있는 것을 막지 않으므로 실제로는 쓸모가 없습니다.
여러 테이블에서 하나의 시퀀스를 사용하는 경우 응답을 보내 주셔서 감사합니다 ~ – Paul
, 이것이 데이터베이스의 성능을 떨어 뜨릴 수 있습니까? – Paul
전혀 차이가 없을 것입니다. 시퀀스와 관련된 잠금이없고 논쟁도 없습니다. –