PostgreSQL 複合鍵自動編號:簡化的方法
追蹤個人地址隨時間的變化需要為個人歷史記錄中的每個變化提供唯一的識別碼。 雖然有複雜的自動編號方案,但 PostgreSQL 使用序列或 IDENTITY 列提供了更乾淨、更有效率的解決方案。
避免複雜性
傳統方法通常會導致編號系統錯綜複雜且容易出錯。 PostgreSQL 的內建功能提供了一個簡化的替代方案。
建議的解:序列/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中文網其他相關文章!