주소 기록 테이블에서 일련번호 자동 생성
데이터베이스에서 주소 기록을 관리하려면 시간 경과에 따른 변경 사항을 추적할 수 있는 강력한 시스템이 필요합니다. 각 개인의 주소 기록에 대해 정확한 일련번호를 유지하는 것이 중요합니다.
도전:
address_history
테이블을 고려해 보세요.
person_id | sequence | timestamp | address | original_address | previous_address |
---|---|---|---|---|---|
1 | 1 | 2023-02-01 | Address A | NULL | NULL |
1 | 2 | 2023-03-01 | Address B | Address A | NULL |
2 | 1 | 2023-04-01 | Address C | NULL | NULL |
잠재적으로 신뢰할 수 없는 자동 증가 메커니즘에 의존하지 않고 어떻게 각 sequence
에 대해 1부터 시작하는 연속 person_id
번호를 자동으로 할당할 수 있습니까?
해결책:
간격이나 불일치가 발생할 수 있는 자동 증가 열에 의존하는 대신 직렬 또는 IDENTITY 열을 기본 키로 사용하고 시퀀스 번호를 동적으로 생성하는 것이 좋습니다.
<code class="language-sql">CREATE TABLE address_history ( address_history_id SERIAL PRIMARY KEY, person_id INT NOT NULL REFERENCES people(id), created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, previous_address TEXT );</code>
순차 번호가 필요한 쿼리의 경우 뷰를 생성할 수 있습니다.
<code class="language-sql">CREATE VIEW address_history_with_sequence AS SELECT *, ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY address_history_id) AS sequence FROM address_history;</code>
이 접근 방식은 기본 키(address_history_id
)에 따라 정렬되는 간격 없는 순서를 보장하고 필요한 경우 순서에 유연성을 제공합니다.
모범 사례:
TIMESTAMP WITH TIME ZONE
을 사용하세요.previous_address
하면 데이터 효율성을 높일 수 있습니다. 원래 주소는 이전 행의 address
열이 방법은 주소 기록 테이블의 일련 번호 관리를 위한 보다 안정적이고 효율적인 솔루션을 제공합니다.
위 내용은 주소 기록 테이블의 그룹화된 행에 대한 일련 번호를 자동으로 생성하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!