Rumah >pangkalan data >tutorial mysql >Bagaimanakah Fungsi Tetingkap Boleh Menyelesaikan Cabaran Penomboran Bersiri dalam Kekunci Kompaun?

Bagaimanakah Fungsi Tetingkap Boleh Menyelesaikan Cabaran Penomboran Bersiri dalam Kekunci Kompaun?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-07 19:51:42999semak imbas

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

Mengatasi Cabaran Penomboran Bersiri dalam Kekunci Kompaun

Pengurusan pangkalan data selalunya memerlukan pemberian nombor berjujukan dalam kumpulan baris, terutamanya apabila berurusan dengan kunci kompaun. Ini boleh menjadi rumit, terutamanya apabila memastikan penomboran berjujukan merentas berbilang transaksi atau selepas pemadaman data. Mari kita periksa senario biasa: jadual sejarah alamat yang menjejaki perpindahan kediaman seseorang. Setiap entri termasuk ID orang, nombor urutan, cap masa dan butiran alamat. Matlamatnya adalah untuk menjana nombor turutan secara automatik bermula pada 1 untuk setiap orang yang unik.

Kaedah Tradisional dan Hadnya

Pendekatan tradisional, seperti lajur yang dikira atau penjana jujukan, boleh gagal. Urus niaga serentak atau pemadaman baris boleh mewujudkan jurang dalam urutan penomboran dengan mudah.

Pendekatan Unggul: Fungsi Tetingkap

Penyelesaian yang lebih mantap memanfaatkan fungsi tetingkap. Fungsi row_number() menjana nombor jujukan dengan cekap dalam partition yang ditentukan. Dengan membahagikan berdasarkan ID orang, kami menjamin nombor urutan unik untuk setiap individu.

Melaksanakan Nombor Siri dengan row_number()

Untuk melaksanakan ini, tambahkan lajur baharu, adr_nr, pada jadual address_history anda. Isinya menggunakan pertanyaan ini:

<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>

Ini menjana adr_nr untuk setiap baris, dengan mengambil kira person_id dan kedudukannya dalam partition person_id itu. Ini memastikan nombor siri unik tanpa mengira perubahan susunan baris.

Amalan Terbaik untuk Integriti Data

Selain penomboran, ingat amalan terbaik ini:

  • Gunakan jenis data yang sesuai untuk cap masa (cth., timestamp atau timestamptz).
  • Meminimumkan lebihan. Elakkan menyimpan data berlebihan seperti original_address jika ia boleh diterbitkan daripada medan sedia ada.

Atas ialah kandungan terperinci Bagaimanakah Fungsi Tetingkap Boleh Menyelesaikan Cabaran Penomboran Bersiri dalam Kekunci Kompaun?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn