【发布时间】:2022-01-27 18:50:18
【问题描述】:
我想显示一个项目表,用户可以在其中添加、删除和重新排序项目。我认为将这些项目存储在 MySQL DB 中的第一种方法是在表中设置一个 order 列,但这似乎效率很低,因为当用户删除一个项目时,我需要更新以下所有项目的 order。如果我只是使用带有 id 或其他东西的 ORDER BY,我不知道如何让用户根据需要重新排序项目。您认为最好的处理方法是什么?
我使用的堆栈:React JS -> Node JS / Express -> MySQL
【问题讨论】:
-
如果您认为您提出的
order列a) 必须是整数并且b) 必须不包含任何间隙,那么您将遇到您预期的问题。但是,如果您接受差距,则无需在删除时更新其他项目。如果您使用浮点数或等效项,那么在其他两个项目之间插入一个项目只需要您找到它们当前订单值的平均值(有时,如果有很多活动,这会崩溃,但你可以有一个“一次性”发生这种情况时重新排序整个表,仍然保持平均成本较低) -
例如,如果我的插入注释不明显。如果要在当前分配的订单 4 和 5 的项目之间插入新项目,则为其分配订单值 ((4+5)/2) = 4.5
-
插入中间不是问题,添加总是在尾部。但是,如果我接受空白,感觉订单可能会失控,因为会有很多删除,并且有空白会有很多未使用的数字
-
当您使用浮点数或小数时,大多数数字都未使用。选择任意两个数字,它们之间的数字更多。即使您使用整数并且有未使用的数字,那到底为什么会成为问题?
标签: mysql sql node.js reactjs express