Về cơ bản, giải pháp thứ hai bạn đề xuất là danh sách được liên kết. Danh sách liên kết được triển khai ở cấp cơ sở dữ liệu thường không phải là một ý tưởng hay. Để truy xuất danh sách các thành phần n
, bạn sẽ cần truy cập cơ sở dữ liệu n
(hoặc sử dụng truy vấn phức tạp). Hiệu suất khôn ngoan, lấy một danh sách trong O (n) là hết sức không hiệu quả.
Trong mã thông thường, danh sách liên kết được sử dụng để có hiệu suất chèn tốt hơn so với mảng (không cần di chuyển tất cả các phần tử xung quanh). Trong cơ sở dữ liệu của bạn, cập nhật tất cả các yếu tố mà không phải là phức tạp chỉ trong 2 truy vấn:
UPDATE item.order = item.order + 1 FROM item WHERE order > 3
INSERT INTO item (order, ...) VALUES (3, ...)
Tôi nhớ nhìn thấy một ứng dụng reuseable mà thực hiện tất cả những gì và một giao diện quản trị tốt đẹp, nhưng tôi không thể tìm thấy nó ngay bây giờ ...
Để tóm tắt, hãy sử dụng giải pháp # 1 một cách chắc chắn và tránh xa giải pháp # 2 trừ khi bạn có lý do rất tốt để không!
Xin chào! Tôi gặp rắc rối tương tự với cùng một vấn đề. Một giải pháp tôi nghĩ là sử dụng mô hình trong 'giải pháp 1' của bạn. Nhưng thay vì di chuyển mọi thứ, tôi chỉ thay đổi giá trị của 'mục được sắp xếp lại'. Ví dụ: tôi muốn di chuyển một Mục ở giữa các mục có thứ tự 9 và 10, tôi sẽ chỉ thay đổi thứ tự của mục thành 9,5. Bạn có nghĩ rằng điều này có thể xấu cho các bảng dài không? –