首頁 > 資料庫 > mysql教程 > 我們如何自動為地址歷史表中的分組行產生序號?

我們如何自動為地址歷史表中的分組行產生序號?

Barbara Streisand
發布: 2025-01-07 19:42:43
原創
860 人瀏覽過

How Can We Automatically Generate Sequential Numbers for Grouped Rows in an Address History Table?

自動產生位址歷史表中的序號

管理資料庫中的地址歷史記錄需要一個強大的系統來追蹤隨時間的變化。 保持每個人的地址歷史記錄準確的順序編號至關重要。

挑戰:

考慮一個address_history表:

person_id sequence timestamp address original_address previous_address
1 1 2023-02-01 Address A NULL NULL
1 2 2023-03-01 Address B Address A NULL
2 1 2023-04-01 Address C NULL NULL

我們如何自動為每個 sequence 分配連續的 person_id 數字,從 1 開始,而不依賴潛在不可靠的自動遞增機制?

解:

我們建議使用序列或 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 WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
  previous_address TEXT
);</code>
登入後複製

對於需要序號的查詢,可以建立一個檢視:

<code class="language-sql">CREATE VIEW address_history_with_sequence AS
SELECT *, ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY address_history_id) AS sequence
FROM address_history;</code>
登入後複製

此方法可確保無間隙序列,按主鍵 (address_history_id) 排序,並在需要時提供排序彈性。

最佳實務:

  • 使用TIMESTAMP WITH TIME ZONE進行精確的時間追蹤。
  • 僅儲存previous_address可以提高資料效率。 原始位址通常可以從前一行的 address 欄位中得出。

此方法為管理地址歷史表中的順序編號提供了更可靠、更有效率的解決方案。

以上是我們如何自動為地址歷史表中的分組行產生序號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板