Sql 具有有序项的有序组的集合

Sql 具有有序项的有序组的集合,sql,postgresql,Sql,Postgresql,我需要使用PostgreSQL 9.5实现此数据结构: 收藏1 image1集合根目录中的图像 图2 集合中的group1组 图1 图2 第2组 图1 收藏2。。。 图像可以存在于任何集合的根目录中,也可以存在于组中。 组和图像必须在父组/集合的上下文中排序 我有以下表格,我准备以任何方式更改它们,以获得最佳结果: CREATE TABLE Collections ( col_id SERIAL PRIMARY KEY, col_name VARCHAR(100) ); CREATE

我需要使用PostgreSQL 9.5实现此数据结构:

收藏1 image1集合根目录中的图像 图2 集合中的group1组 图1 图2 第2组 图1 收藏2。。。 图像可以存在于任何集合的根目录中,也可以存在于组中。 组和图像必须在父组/集合的上下文中排序

我有以下表格,我准备以任何方式更改它们,以获得最佳结果:

CREATE TABLE Collections (
  col_id SERIAL PRIMARY KEY,
  col_name VARCHAR(100)
);

CREATE TABLE Groups (
  group_id SERIAL PRIMARY KEY,
  group_collection INT REFERENCES Collections (col_id) ON DELETE CASCADE,
  group_name VARCHAR(100),
  group_index SERIAL -- Index of group in a collection
);

CREATE TABLE Images (
  image_id SERIAL PRIMARY KEY,
  image_collection INT REFERENCES Collections (col_id) ON DELETE CASCADE,
  image_group INT REFERENCES Groups (group_id) ON DELETE CASCADE,
  image_url VARCHAR(512),
  image_index SERIAL -- Index of image in a group
);
选择任何集合的内容都没有问题,但是我在添加、删除和重新排列图像和组时遇到问题。当然,我希望在任何组/集合顺序中保持唯一的索引顺序,可以在[1,4,10]中有任何中断,但不能有[1,1,3]这样的重复值

使用示例数据更新。下面是到的链接,其中包含示例数据和查询。我正在使用此选择请求,它可以为我提供所需的输出:

SELECT
  Groups.*,
  json_agg(Images.*) as images
FROM Groups
RIGHT JOIN Images
  ON Groups.group_id = Images.image_group
WHERE Groups.group_collection = 1 OR Images.image_collection = 1
GROUP BY Groups.group_id;
我的主要问题是对图像进行重新排序,特别是从一个组到另一个组的特定位置的运动图像


注意!很抱歉,由于SQL world也有这些概念,因此可能会出现顺序和组的交叉概念,但我不知道如何用其他词来说明这些概念。

请添加一些示例数据,例如插入到中,以及基于该示例数据的预期输出格式化text@a_horse_with_no_name谢谢你的回复!我在更新中添加了一个指向sqlfiddle的链接。可能是这样的: