例如,
用户有[image1.jpg, image2.jpg ,image3.jpg]
用户可以将其重新排序为[image2.jpg, image1.jpg, image3.jpg]
,添加到末尾,然后从任意位置删除
我可以想到两种存储它们的方法:
Array
类型存储在数据库中即可。当用户添加/删除/重新排序照片时,覆盖数据库中的整个阵列position
列存储许多照片行,这些行属于1个用户。插入时添加到最后一个位置+1。删除时,必须在删除位置后向后移动位置-1 推荐的设计是什么?
答案 0 :(得分:0)
我认为SQL中最自然的设计应该是一个单独的表:
acceptedFiles
您已经注意到,如果您希望职位空缺且有序,那么您需要更新所有行。
这有几个功能/优点:
另一种选择是将这些作为数组存储在create table userImages (
userImageId serial,
userId int references users(userId),
image varchar(255),
position int
);
中的一行中。为了保持顺序,您基本上需要在应用程序中执行此操作。也就是说,读取数组,进行删除,插入和重新排序,然后再次保存该行。
这有几个功能/缺点,例如:
我通常偏向于第一种方法,但是在某些情况下,第二种方法是相当合理的。
答案 1 :(得分:-1)
我认为是。如果照片按某种属性排序(例如上次编辑时间),则只需按属性选择XXX排序即可。 如果用户需要订购照片,则必须使用“位置”列。