Saya mencoba memikirkan cara terbaik untuk melakukan hal berikut:
Saya memiliki daftar tugas yang disimpan dalam database. Suatu tugas memiliki prioritas yang ditetapkan padanya. Anda dapat mengubah prioritas tugas untuk menyusun ulang urutan yang seharusnya dijalankan.
Saya sedang memikirkan sesuatu yang sangat mirip dengan Pelacak Penting.
Jadi bayangkan kita memiliki yang berikut ini:
1 Task A
2 Task B
3 Task C
4 Task D
5 Task E
Kami memutuskan bahwa E sekarang adalah tugas yang paling penting
1 Task E
2 Task A
3 Task B
4 Task C
5 Task D
Saya perlu memperbarui semua 5 tugas untuk memberi mereka prioritas baru.
Jika Tugas B kemudian menjadi lebih penting maka AI akan saya miliki
1 Task E
2 Task B
3 Task A
4 Task C
5 Task D
Saya perlu memperbarui Tugas B dan A saja.
Cara apa yang akan dilakukan untuk menyusun ini dalam DB? Saya membayangkan bahwa Anda akan memiliki proyek yang berbeda disimpan dalam tabel yang sama yang akan memiliki bobot sendiri.
Apakah lebih baik untuk menunjuk Tugas yang terjadi setelahnya (sedikit seperti daftar tautan).
Ini benar-benar dump otak. Hanya ingin tahu bagaimana Anda akan menerapkan sesuatu seperti ini.
Kami melakukan hal yang Anda bicarakan ini. Kami melakukan ini dengan menggunakan satu prosedur tersimpan yang menyusun ulang daftar item. Setiap item dalam daftar memiliki id unik dan nomor urut urutan.
Sebagai contoh:
Prosedur tersimpan yang menyusun ulang item membutuhkan dua parameter input:
Kami menggunakan tabel temp untuk menyimpan item dalam pesanan baru:
Kami menggunakan tiga pernyataan pilih untuk memasukkannya ke orde baru:
Kami kemudian memperbarui tabel dasar (tblTasks) dengan urutan baru yang sebenarnya adalah kolom identitas RowId dari tabel temp:
Ini bekerja seperti juara setiap saat.
sumber
Saya belum memikirkan ini secara menyeluruh ..... Tapi mengapa tidak hanya membolehkan desimal sehingga Anda dapat memasukkan berbagai hal di antara yang lain tanpa memperbarui semuanya?
Anda bisa meremas sesuatu antara 1 dan 2 dengan nilai 1,5.
Saya juga menghindari nilai minimum dan maksimum. Bolehkan angka untuk memasukkan negatif jika prioritasnya datang sebelum apa pun yang saat ini 0.
Anda dapat mempertimbangkan memiliki prioritas "tampilan manusia" yang terpisah dari prioritas "pemesanan" internal untuk menghindari menunjukkan desimal aneh dan nilai negatif.
sumber
Sangat masuk akal untuk mengimplementasikan Daftar Tertaut dan operasinya dalam RDBMS. Cukup ganti array dan manipulasi referensi dengan query SQL. Namun, saya tidak yakin apakah ini benar-benar cara yang paling efisien untuk pergi karena beberapa operasi sederhana akan memerlukan banyak pertanyaan SQL
Untuk tabel tugas, Anda menambahkan kolom "next_task" dan "prev_task" yang merupakan kunci asing ke kolom id dari tabel yang sama (dengan asumsi bahwa "-1" setara dengan NULL)
Kembali tugas dengan tertinggi_prioritas () : Permintaan SQL yang mengembalikan tugas dengan prev_task = -1
E adalah tugas yang paling penting : SQL query yang mengubah next_task dari E ke ID tugas dengan prioritas tertinggi. Dan perubahan prev_task dari E ke -1 ...
Ini dan operasi lainnya seperti meletakkan E sebelum A, atau mencetak daftar tugas yang diurutkan akan membutuhkan lebih banyak pertanyaan SQL yang semuanya atomik (kecuali Anda dapat mengoptimalkan). Ini adalah latihan yang bagus tapi mungkin bukan cara yang paling efisien untuk melakukannya.
sumber
Pendekatan lain untuk masalah prioritas adalah menentukan item apa yang lebih penting daripada item tersebut. Dalam aplikasi SDM, ini seperti mengatakan siapa manajer karyawan.
Kemudian baca http://blog.sqlauthority.com/2012/04/24/sql-server-introduction-to-hierarchical-query-using-a-recursive-cte-a-primer/ untuk membuat kueri yang mengutamakan level.
Saya pikir ini adalah pengalaman pengguna yang lebih sederhana dalam menetapkan prioritas, tetapi memungkinkan beberapa prioritas pada tingkat yang sama.
sumber
Salah satu cara sederhana adalah memulai dengan sesuatu seperti ini:
Kemudian, untuk memindahkan "Tugas E" antara Tugas A dan Tugas B, katakanlah, Anda baru saja menetapkan prioritas "Tugas E" untuk sesuatu yang setengah jalan antara Tugas A dan Tugas B (yaitu "150" dalam kasus ini).
Tentu saja, jika Anda terus mengatur ulang prioritas, Anda akhirnya akan mengalami masalah di mana dua tugas yang berdekatan tidak memiliki "celah" untuk memasukkan entri baru. Tetapi ketika itu terjadi, Anda cukup "mengatur ulang" semua prioritas dalam satu kembali ke 100, 200, 300, dll.
sumber
Saya bukan guru basis data, jadi saya memecahkan ini dengan cara paling logis yang saya bisa di Access 2010. Saya memiliki bidang "Prioritas" yang merupakan bidang angka. Lalu saya punya acara untuk bidang ini.
Acara ini adalah acara setelah pembaruan untuk bidang "Prioritas" yang memicu Permintaan Pembaruan "qryPriority" untuk menambahkan 1 ke nomor prioritas semua catatan lain yang memiliki prioritas lebih besar atau sama dengan nomor prioritas yang baru saja dimasukkan.
Berikut ini adalah kode acara VB dan Perbarui Query SQL:
Kode VB Acara "Prioritas":
"qryPriority" Memperbarui Query SQL:
sumber