首頁 >資料庫 >mysql教程 >如何在PostgreSQL中高效實現複合鍵自動編號?

如何在PostgreSQL中高效實現複合鍵自動編號?

Patricia Arquette
Patricia Arquette原創
2025-01-07 19:46:42260瀏覽

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

PostgreSQL 複合鍵自動編號:簡化的方法

追蹤個人地址隨時間的變化需要為個人歷史記錄中的每個變化提供唯一的識別碼。 雖然有複雜的自動編號方案,但 PostgreSQL 使用序列或 IDENTITY 列提供了更乾淨、更有效率的解決方案。

避免複雜性

傳統方法通常會導致編號系統錯綜複雜且容易出錯。 PostgreSQL 的內建功能提供了一個簡化的替代方案。

建議的解:序列/IDENTITY 欄位

利用 PostgreSQL 的 serialIDENTITY 欄位可以顯著簡化這個過程。 這消除了管理複雜序列的需要。

實作範例

以下是如何在 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(帶時區的時間戳)以提高準確性和一致性。
  • 刪除多餘的addressoriginal_address列,簡化表結構。 只需要previous_address

以上是如何在PostgreSQL中高效實現複合鍵自動編號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn