データベースのシリアル番号によるアドレス変更追跡の効率化
データベース内のアドレス変更を管理するには、多くの場合、各変更を記録する履歴テーブルが必要になります。 このテーブルには通常、個人 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 WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, previous_address TEXT );</code>
ウィンドウ関数を使用したシリアル番号の生成
このテーブル構造を使用すると、ウィンドウ関数は、ギャップのない各個人の連続番号を生成するための洗練されたソリューションを提供します。
<code class="language-sql">CREATE VIEW address_history_nr AS SELECT *, ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY address_history_id) AS adr_nr FROM address_history;</code>
このビューは、元のテーブルを直接置き換えるものとして機能し、クエリ内で必要なシリアル番号 (adr_nr
) を提供します。
効率のためのデータ モデルの最適化
最適なパフォーマンスを得るには、次のデータ モデルの改善を検討してください。
TIMESTAMP WITHOUT TIME ZONE
の代わりに TIMESTAMP WITH TIME ZONE
(または DATETIME
) を使用します。previous_address
フィールドだけで十分なので、address
列と original_address
列を個別に作成する必要はありません。 これにより、ストレージ容量が削減され、クエリ速度が向上します。以上がデータベース内の個人グループ内の住所変更用に一意のシリアル番号を効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。