Order 排序
Order 排序
Categories:
可重新排序的資料表設計
方式 | 說明 |
---|---|
使用 integer 欄位排序 | 將新增的資料排序間隔加大,當有需要插入排序時,可以將重新排序項目數字更新到未用的數字中間,只是若重新排序空間不夠時,必須要重新更新排序數字 |
使用 double 欄位排序 | 當要重新排序時,將要排序的資料順序指定到指定的精度後方,多加幾個小數位數,即可調整排序,但要小心若排序的欄位超過此精度,可能會有排序錯誤狀況發生,可以定期重新對資料重新編號排序 |
使用 string 欄位排序 | 當要重新排序時,將要排序的資料順序指定到指定的精度後方,多加幾個字串,即可調整排序,但要小心字串長度過長問題 |
限制排序欄位一次只能移動 1 個位置 | 將兩個項目排序數字交換即可,但使用體驗可能會不太好 |
資料重新排序策略
- 評估排序的項目數量有多少,避免超過可排序精度
- 每晚重新整理排序數字,讓精度重置,可以再繼續讓使用者重新排序
- 讓重新排序行為在離峰時間執行,提高高峰時間使用者存取效率
double 排序
項目 | 排序 double 欄位 |
---|---|
item1 | 1.0 |
item2 | 1.01 |
item3 | 1.012 |
item4 | 1.0123 |
item5 | 1.01234 |
item6 | 1.012345 |
integer 排序
項目 | 排序 integer 欄位 |
---|---|
item1 | 100 |
item2 | 200 |
item3 | 300 |
item4 | 400 |
item5 | 500 |
item6 | 600 |
string 排序
項目 | 排序 string 欄位 |
---|---|
item1 | a |
item2 | ab |
item3 | abc |
item4 | abcd |
item5 | abcde |
item6 | abcdef |
參考資料
- Storing a re-orderable list in a database - Software Engineering Stack Exchange
- How do you best represent ordered lists in a relational database, allowing for easy and efficient updates (insertion/deletion of list elements)? - Quora
- User-defined Order in SQL
- Storing an ordered list in database
- How to design a database for storing a sorted list? - Database Administrators Stack Exchange
- database design - How to move an element in a sorted list and keep the CouchDb write “atomic” - Stack Overflow
- How to save a sorted list in a database? (SQL or NoSQL) | George Tachev’s Blog