Tôi có một bộ sưu tập các đối tượng trong cơ sở dữ liệu. Hình ảnh trong thư viện ảnh, sản phẩm trong danh mục, chương trong sách, v.v. Mỗi đối tượng được thể hiện dưới dạng hàng. Tôi muốn có thể tự ý đặt những hình ảnh này, lưu trữ thứ tự đó trong cơ sở dữ liệu để khi tôi hiển thị các đối tượng, chúng sẽ theo đúng thứ tự.Trình bày thứ tự trong một cơ sở dữ liệu quan hệ
Ví dụ: giả sử tôi đang viết một cuốn sách và mỗi chương là một đối tượng. Tôi viết cuốn sách của tôi, và đặt các chương theo thứ tự sau:
Giới thiệu, tiếp cận, Mẫu vs Chức năng, lỗi, nhất quán, Kết luận, Index
Nó đi vào trình biên tập, và đi kèm trở lại với trình tự gợi ý sau:
Giới thiệu, Form, Chức năng, tiếp cận, nhất quán, lỗi, Kết luận, Index
Làm thế nào tôi có thể lưu trữ thứ tự này trong cơ sở dữ liệu một cách mạnh mẽ, hiệu quả?
Tôi đã có ý tưởng sau đây, nhưng tôi không vui mừng với ai trong số họ:
Array. Mỗi hàng có một ID đặt hàng, khi thứ tự được thay đổi (thông qua việc loại bỏ theo sau là chèn), các ID đơn đặt hàng được cập nhật. Điều này làm cho việc truy xuất trở nên dễ dàng, vì nó chỉ là
ORDER BY
, nhưng có vẻ dễ bị phá vỡ.// REMOVAL
UPDATE ... SET orderingID=NULL WHERE orderingID=removedID
UPDATE ... SET orderingID=orderingID-1 WHERE orderingID > removedID
// INSERTION
UPDATE ... SET orderingID=orderingID+1 WHERE orderingID > insertionID
UPDATE ... SET orderID=insertionID WHERE ID=addedID
danh sách liên kết. Mỗi hàng có một cột cho id của hàng tiếp theo trong thứ tự. Traversal có vẻ tốn kém ở đây, mặc dù có thể bằng cách nào đó để sử dụng
ORDER BY
mà tôi không nghĩ đến.Mảng cách nhau. Đặt orderID (như được sử dụng trong # 1) là lớn, vì vậy đối tượng đầu tiên là 100, thứ hai là 200, vv Sau đó, khi chèn xảy ra, bạn chỉ cần đặt nó tại
(objectBefore + objectAfter)/2
. Tất nhiên, điều này sẽ cần phải được cân bằng đôi khi, vì vậy bạn không có những thứ quá gần nhau (ngay cả với phao, bạn cuối cùng sẽ chạy vào làm tròn lỗi).
Không có thứ nào trong số này đặc biệt thanh lịch với tôi. Có ai có cách nào tốt hơn để làm điều đó không?
+1 để đề cập đến đánh số thưa thớt. Tôi đã sử dụng đá quý [xếp hạng-model] (https://github.com/mixonic/ranked-model) cho điều này trong quá khứ. –