ホームページ > データベース > mysql チュートリアル > PostgreSQL で複合キーの自動番号付けを効率的に実装するにはどうすればよいですか?

PostgreSQL で複合キーの自動番号付けを効率的に実装するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-07 19:46:42
オリジナル
224 人が閲覧しました

How Can I Efficiently Implement Auto-Numbering for Compound Keys in PostgreSQL?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート