PostgreSQL 複合キーの自動番号付け: 簡素化されたアプローチ
個人の住所変更を時間の経過とともに追跡するには、個人の履歴内の変更ごとに一意の識別子が必要です。 複雑な自動番号付けスキームが存在しますが、PostgreSQL はシリアル列または IDENTITY 列を使用した、よりクリーンで効率的なソリューションを提供します。
複雑さの回避
従来の方法では、複雑でエラーが発生しやすい番号付けシステムが作成されることがよくあります。 PostgreSQL の組み込み機能は、合理化された代替手段を提供します。
推奨される解決策: Serial/IDENTITY 列
PostgreSQL の serial
または IDENTITY
列を利用すると、プロセスが大幅に簡素化されます。 これにより、複雑なシーケンスを管理する必要がなくなります。
実装例
これを address_history
テーブルに実装する方法は次のとおりです。
<code class="language-sql">CREATE TABLE address_history ( address_history_id serial PRIMARY KEY, person_id int NOT NULL REFERENCES people(id), created_at timestamptz NOT NULL DEFAULT current_timestamp, previous_address text );</code>
連番の取得
個人ごとの住所変更ごとに連続番号を取得するには、row_number()
ウィンドウ関数を使用します。
<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>
このビューは、クエリ内の address_history
テーブルの直接の置き換えとして機能し、アドレス変更ごとに連続番号 (adr_nr
) を提供します。
主な改善点
timestamptz
(タイムゾーン付きのタイムスタンプ) を使用します。address
列と original_address
列を削除し、テーブル構造を簡素化します。 previous_address
のみが必要です。以上がPostgreSQL で複合キーの自動番号付けを効率的に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。