當對象 A 關聯多個對象 B,需支持前端拖拽或上下移動按鈕調整 B 的順序。最簡單通用的方案是在關聯表中增加順序字段 ordernum。
OBJECTGROUPROBJECT)增加 ordernum BIGINT,初始值可用 System.currentTimeMillis() 毫秒時間戳,保證唯一且有序。ordernum 值;拖拽排序則批量更新受影響記錄的 ordernum(可重新分配連續序號)。SELECT ... ORDER BY OGRO.ORDERNUM ASC 即可獲得正確順序。-- 查詢某組織下所有資產,按自定義順序 SELECT A.* FROM ASSET A JOIN OBJECTGROUPROBJECT OGRO ON A.ASSETID = OGRO.OBJECTID WHERE OGRO.OGID = 20160401123045006 ORDER BY OGRO.ORDERNUM;
| 優點 | 缺點 |
|---|---|
| 實現極簡,無需額外表結構 | 大量數據批量調序需更新多行 | 支持任意插入/移動/刪除 | 時間戳初始值間隙大,長期調整後可能需重排 | 兼容所有關係型數據庫 | 高併發調序需行鎖或樂觀鎖防衝突 |
DECIMAL 或浮點數作為 ordernum,插入時取中間值(如 1 和 2 之間插 1.5),減少全量更新。version 樂觀鎖字段,防止併發修改丟失更新。