Kebutuhan umum saat menggunakan database adalah mengakses catatan secara berurutan. Misalnya, jika saya memiliki blog, saya ingin dapat memesan ulang posting blog saya dalam urutan acak. Entri-entri ini sering memiliki banyak hubungan, jadi database relasional sepertinya masuk akal.
Solusi umum yang saya lihat adalah menambahkan kolom integer order
:
CREATE TABLE AS your_table (id, title, sort_order)
AS VALUES
(0, 'Lorem ipsum', 3),
(1, 'Dolor sit', 2),
(2, 'Amet, consect', 0),
(3, 'Elit fusce', 1);
Kemudian, kita bisa mengurutkan baris dengan order
mengatur urutannya.
Namun, ini tampak canggung:
- Jika saya ingin memindahkan record 0 ke awal, saya harus menyusun ulang setiap record
- Jika saya ingin menyisipkan catatan baru di tengah, saya harus menyusun ulang setiap catatan setelahnya
- Jika saya ingin menghapus catatan, saya harus menyusun ulang setiap catatan setelahnya
Sangat mudah untuk membayangkan situasi seperti:
- Dua catatan memiliki hal yang sama
order
- Ada celah di
order
antara catatan
Ini bisa terjadi dengan cukup mudah karena sejumlah alasan.
Ini adalah pendekatan yang diambil oleh aplikasi seperti Joomla:
Anda bisa berpendapat bahwa antarmuka di sini buruk, dan bahwa alih-alih manusia secara langsung mengedit angka, mereka harus menggunakan panah atau seret-dan-jatuhkan — dan Anda mungkin benar. Namun di balik layar, hal yang sama terjadi.
Beberapa orang telah mengusulkan menggunakan desimal untuk menyimpan pesanan, sehingga Anda dapat menggunakan "2.5" untuk menyisipkan catatan di antara catatan di urutan 2 dan 3. Dan sementara itu sedikit membantu, itu bisa dibilang lebih berantakan karena Anda bisa berakhir dengan desimal aneh (di mana Anda berhenti? 2,75? 2,875? 2,8125?)
Apakah ada cara yang lebih baik untuk menyimpan pesanan di meja?
orders
dan ddl.