ความต้องการทั่วไปเมื่อใช้ฐานข้อมูลคือการเข้าถึงระเบียนตามลำดับ ตัวอย่างเช่นถ้าฉันมีบล็อกฉันต้องการจัดลำดับโพสต์บล็อกของฉันใหม่ตามลำดับที่กำหนดเอง รายการเหล่านี้มักจะมีความสัมพันธ์มากมายดังนั้นฐานข้อมูลเชิงสัมพันธ์จึงดูสมเหตุสมผล
วิธีแก้ปัญหาทั่วไปที่ฉันได้เห็นคือการเพิ่มคอลัมน์จำนวนเต็มorder
:
CREATE TABLE AS your_table (id, title, sort_order)
AS VALUES
(0, 'Lorem ipsum', 3),
(1, 'Dolor sit', 2),
(2, 'Amet, consect', 0),
(3, 'Elit fusce', 1);
จากนั้นเราสามารถจัดเรียงแถวตามorder
เพื่อรับพวกเขาในลำดับที่เหมาะสม
อย่างไรก็ตามดูเหมือนว่าเงอะงะ:
- ถ้าฉันต้องการย้ายระเบียน 0 ไปยังจุดเริ่มต้นฉันต้องเรียงลำดับใหม่ทุกระเบียน
- ถ้าฉันต้องการแทรกระเบียนใหม่ที่อยู่ตรงกลางฉันต้องเรียงลำดับใหม่ทุกระเบียนหลังจากนั้น
- หากฉันต้องการลบบันทึกฉันต้องเรียงลำดับใหม่ทุกระเบียนหลังจากนั้น
มันง่ายที่จะจินตนาการถึงสถานการณ์เช่น:
- สองบันทึกมีเหมือนกัน
order
- มีช่องว่างใน
order
ระหว่างบันทึก
สิ่งเหล่านี้สามารถเกิดขึ้นได้ง่าย ๆ ด้วยเหตุผลหลายประการ
นี่เป็นวิธีการที่แอพพลิเคชั่นอย่าง Joomla ใช้:
คุณสามารถยืนยันได้ว่าอินเทอร์เฟซที่นี่ไม่ดีและแทนที่จะเป็นมนุษย์แก้ไขตัวเลขโดยตรงพวกเขาควรใช้ลูกศรหรือลากและวาง - และคุณอาจถูกต้อง แต่เบื้องหลังสิ่งเดียวกันกำลังเกิดขึ้น
บางคนเสนอให้ใช้ทศนิยมในการเก็บคำสั่งซื้อเพื่อให้คุณสามารถใช้ "2.5" เพื่อแทรกเรคคอร์ดในระหว่างเรคคอร์ดตามลำดับที่ 2 และ 3 และในขณะที่ช่วยเล็กน้อยก็อาจจะยุ่งเหยิงเพราะคุณสามารถจบลงด้วย ทศนิยมแปลก ๆ (คุณหยุดที่ไหน 2.75? 2.875? 2.8125?)
มีวิธีที่ดีกว่าในการจัดเก็บคำสั่งซื้อในตารางหรือไม่?
orders
และ ddl