首頁 > 資料庫 > mysql教程 > 視窗函數如何解決複合鍵中的序號挑戰?

視窗函數如何解決複合鍵中的序號挑戰?

Mary-Kate Olsen
發布: 2025-01-07 19:51:42
原創
957 人瀏覽過

How Can Window Functions Solve Serial Numbering Challenges in Compound Keys?

解複合鍵中的序號挑戰

資料庫管理通常需要在行組內分配序號,特別是在處理複合鍵時。 這可能很棘手,特別是在確保多個事務之間或資料刪除後的順序編號時。 讓我們來看看一個常見的場景:追蹤一個人的住宅搬遷的地址歷史表。 每個條目包括人員 ID、序號、時間戳記和地址詳細資料。目標是為每個唯一的人自動產生一個從 1 開始的序號。

傳統方法及其限制

傳統方法,例如計算列或序列產生器,可能會達不到要求。 並發交易或行刪除很容易在編號序列中造成間隙。

高階方法:視窗函數

更強大的解決方案利用視窗函數。 row_number() 函數在定義的分區內有效地產生序號。 透過根據人員 ID 進行分區,我們保證每個人的序號都是唯一的。

使用 row_number()

實現序號

要實現此目的,請將新列 adr_nr 新增到您的 address_history 表中。 使用以下查詢填充它:

<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 以及該 person_id 分區中的位置產生 person_id。無論行順序如何變化,這都可以確保唯一的序號。

資料完整性的最佳實務

除了編號之外,請記住以下最佳實踐:

  • 對時間戳記使用適當的資料類型(例如,timestamptimestamptz)。
  • 最小化冗餘。 如果可從現有欄位派生,請避免儲存像 original_address 這樣的冗餘資料。

以上是視窗函數如何解決複合鍵中的序號挑戰?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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