Rumah >pangkalan data >tutorial mysql >Bagaimanakah Kami Boleh Menjana Nombor Berjujukan Secara Automatik untuk Baris Dikumpulkan dalam Jadual Sejarah Alamat?

Bagaimanakah Kami Boleh Menjana Nombor Berjujukan Secara Automatik untuk Baris Dikumpulkan dalam Jadual Sejarah Alamat?

Barbara Streisand
Barbara Streisandasal
2025-01-07 19:42:43862semak imbas

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

AutoMenjana Nombor Jujukan dalam Jadual Sejarah Alamat

Mengurus sejarah alamat dalam pangkalan data memerlukan sistem yang teguh untuk menjejaki perubahan dari semasa ke semasa. Mengekalkan penomboran jujukan yang tepat untuk sejarah alamat setiap individu adalah penting.

Cabaran:

Pertimbangkan address_history jadual:

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

Bagaimanakah kita boleh menetapkan nombor sequence berjujukan secara automatik untuk setiap person_id, bermula pada 1, tanpa bergantung pada mekanisme peningkatan automatik yang mungkin tidak boleh dipercayai?

Penyelesaian:

Daripada bergantung pada lajur peningkatan automatik yang boleh membawa kepada jurang atau ketidakkonsistenan, kami mencadangkan menggunakan lajur bersiri atau IDENTITI sebagai kunci utama dan menjana nombor jujukan secara dinamik.

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

Untuk pertanyaan yang memerlukan nombor jujukan, paparan boleh dibuat:

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

Pendekatan ini memastikan urutan tanpa celah, disusun mengikut kekunci utama (address_history_id), dan memberikan fleksibiliti dalam pesanan jika perlu.

Amalan Terbaik:

  • Gunakan TIMESTAMP WITH TIME ZONE untuk penjejakan masa yang tepat.
  • Menyimpan sahaja previous_address boleh meningkatkan kecekapan data. Alamat asal selalunya boleh diperoleh daripada lajur address baris sebelumnya.

Kaedah ini menyediakan penyelesaian yang lebih dipercayai dan cekap untuk mengurus penomboran berjujukan dalam jadual sejarah alamat.

Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Menjana Nombor Berjujukan Secara Automatik untuk Baris Dikumpulkan dalam Jadual Sejarah Alamat?. 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