我有以下表格:
======================= =======================
| galleries | | images |
|---------------------| |---------------------|
| PK | gallery_id |<--\ | PK | image_id |
| | name | \ | | title |
| | description | \ | | description |
| | max_images | \ | | filename |
======================= \-->| FK | gallery_id |
=======================
我需要为与图库相关的图像实现一种排序方式.据我了解,关系数据库不是为分层排序而设计的.
我也希望为并发的可能性做准备,即使它在我当前的项目中不太可能成为问题,因为它是一个单用户应用程序. (因此,此处的优先事项是允许用户重新安排订单).
我不确定执行此操作的最佳方法,因为我从未在数据库中实现排序,并且对并发性还陌生.因此,我阅读了有关锁定MySQL表的信息,并且不确定在这种情况下是否应该实现它.
这是我的两个想法:
>在图像表中添加一个名为order_num的列.锁定表并允许客户端重新排列图像的顺序,然后更新表并对其解锁.
>将一个名为order_num的列添加到imagess表中(与上面的想法1一样).允许客户端一次更新一个图像的位置而无需锁定.
谢谢!
解决方法:
我的想法是:您不想将太多的工时投入到一个不可能发生的问题上.因此,请采用不会引起很多副作用的简单解决方案,如果有问题,请稍后进行修复.
在基于Web的世界中,您不想锁定表以使用户可以进行编辑,然后等待用户完成操作来解锁表.在这种情况下,用户1可能永远不会回来,他们可能会丢失会话,或者浏览器可能崩溃,等等.这意味着您必须做很多工作才能弄清楚何时解锁该表,并加上使用户2知道的代码该表已被锁定,他们对此无能为力.
我建议采用这种设计:让他们两个都使用一些JavaScript进入编辑模式,可能在他们的浏览器中.他们可以按顺序拖动图像,直到满意为止,然后完整提交订单.您可以在单个事务中将order_num字段更新到数据库.
在这种情况下,最糟糕的事情是用户1和用户2正在同时编辑,而最后编辑的人将保留其顺序.也许它们在同一时间更新,但是数据库将处理该事务,因为它将排队交易.
这个问题的后备之处在于,无论谁被覆盖订单,都必须重新做一次.烦人但没有损失,实现此目标的代码比处理锁定的代码简单得多.
我不想回避您的问题,但这就是我的想法.