首頁 >資料庫 >mysql教程 >如何為資料庫中人員群組內的位址變更高效能產生唯一序號?

如何為資料庫中人員群組內的位址變更高效能產生唯一序號?

Patricia Arquette
Patricia Arquette原創
2025-01-07 19:36:42938瀏覽

How Can I Efficiently Generate Unique Serial Numbers for Address Changes within Person Groups in a Database?

使用資料庫序號簡化位址變更追蹤

管理資料庫中的位址變更通常需要一個歷史表來記錄每次修改。 此表通常包括人員 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 欄位就足夠了,無需單獨的 addressoriginal_address 欄位。 這減少了儲存空間並提高了查詢速度。

以上是如何為資料庫中人員群組內的位址變更高效能產生唯一序號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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