具有订购商品的订购组的集合

时间:2015-12-03 14:00:56

标签: sql postgresql

我需要实现这个数据结构(我正在使用PostgreSQL 9.5):

  • 集合#1
    • 图片#1(收藏根目录中的图片)
    • 图像#2
    • 组#1(集合中的组)
      • 图像#1
      • 图像#2
    • 组#2
      • 图像#1
  • 集合#2 ...

images可以位于任何CollectionGroups的根目录中。 必须在父Groups的上下文中对ImagesGroup/Collection进行排序。

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

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
);

SELECT任何Collection的内容都没有问题,但我在添加,删除和重新排序ImagesGroups时遇到问题。当然我想在任何Group/Collection中保留唯一索引(排序)(顺序可以像[1,4,10]那样有任何中断,但不能有重复的值,如[1,1,3])。

使用示例数据进行更新。以下是sqlfiddle的示例数据和查询链接。我正在使用这个SELECT请求,它没问题(它给了我所需的输出):

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;

我的主要问题是重新排序Images(特别是将Image从一个Group移动到一个特定的地方转移到另一个Group)。

注意!对于(可能) order group 的相交概念感到抱歉,因为SQL世界也有这些概念,但我不知道如何用其他词语说出同样的事情。

0 个答案:

没有答案