Size: a a a

pgsql – PostgreSQL

2021 March 12

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Егор Юдин
Есть таблица StorageItem, которая представляет из себя краткую инфу о файле и его ссылку на удаленном хранилище.

Есть промежуточные таблицы UserFiles, ProductFiles и тд., которые хранят ссылку на юзера/продукт и сторедж айтем. Таким образом выходит, что хранилище для всех файлов всех сущностей якобы одно. Но из-за этого на один сторедж айтем может сослаться и юзер, и продукт, хотя такого быть не должно.
Т.е. продуктовые файлы не могут принадлежать пользовательским, получается?
источник

ЕЮ

Егор Юдин in pgsql – PostgreSQL
Егор Юдин
Есть таблица StorageItem, которая представляет из себя краткую инфу о файле и его ссылку на удаленном хранилище.

Есть промежуточные таблицы UserFiles, ProductFiles и тд., которые хранят ссылку на юзера/продукт и сторедж айтем. Таким образом выходит, что хранилище для всех файлов всех сущностей якобы одно. Но из-за этого на один сторедж айтем может сослаться и юзер, и продукт, хотя такого быть не должно.
А ну и ещё естественно нельзя, чтобы два юзера сослались на один и тот же сторедж айтем. Но тут просто юник можно кинуть
источник

ЕЮ

Егор Юдин in pgsql – PostgreSQL
Михаил Шурутов
Т.е. продуктовые файлы не могут принадлежать пользовательским, получается?
Да
источник

ЕЮ

Егор Юдин in pgsql – PostgreSQL
Создавать свои таблицы файлов для каждой сущности? Чтобы не было никакой ссылки на общее хранилище?
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Егор Юдин
Есть таблица StorageItem, которая представляет из себя краткую инфу о файле и его ссылку на удаленном хранилище.

Есть промежуточные таблицы UserFiles, ProductFiles и тд., которые хранят ссылку на юзера/продукт и сторедж айтем. Таким образом выходит, что хранилище для всех файлов всех сущностей якобы одно. Но из-за этого на один сторедж айтем может сослаться и юзер, и продукт, хотя такого быть не должно.
Думаю я, что
> Есть промежуточные таблицы UserFiles, ProductFiles и тд., которые хранят ссылку на юзера/продукт и сторедж айтем.
Все эти таблицы надо слить в одну, где будет проставлен нужный тип: user, product, etc; и ключ, совпадающий с ПК storageitem.
источник

ЕЮ

Егор Юдин in pgsql – PostgreSQL
Михаил Шурутов
Думаю я, что
> Есть промежуточные таблицы UserFiles, ProductFiles и тд., которые хранят ссылку на юзера/продукт и сторедж айтем.
Все эти таблицы надо слить в одну, где будет проставлен нужный тип: user, product, etc; и ключ, совпадающий с ПК storageitem.
О, вот так вы имеете ввиду?
источник

СК

Сергей Кравчук... in pgsql – PostgreSQL
Ну или можно использовать 1 сиквенс для первичного ключа на все эти таблицы
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
user_id, product_id и прочие *_id - в один столбец: consumer_id и рядом: consumer_type
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Дмитрий Мачихелян
Подскажите как составить запрос. Есть у меня запрос:
create or replace view contacts_count as 
select contacts.user_id, count(contacts.user_id)
from contacts
group by contacts.user_id

Вот мне нужно сделать так, чтобы в этот запрос подать массив idшников и по ним собирать count. Также в этом массиве могут быть айдишники, которых нет в таблице, но в представлении нужно их отображать с count = 0
Чтобы в этот запрос что-то "подать", его можно разве что переделать в SQL function.
А иначе — только JOIN-ить этот view с чем-то (например, "FROM unnest(<массив>) AS ids(id) LEFT JOIN <view> AS v ON  v.user_id = ids.id") , как-то "параметризовать" сам view нельзя.
источник

ЕЮ

Егор Юдин in pgsql – PostgreSQL
Михаил Шурутов
user_id, product_id и прочие *_id - в один столбец: consumer_id и рядом: consumer_type
Аа.. так можно делать? Просто.. а как понять на какую таблицу ссылается consumer_id, только по consumer_type? Выходит, что консьюмером может быть любая сущность. Я такого раньше не делал, использую орм, пока не представляю как это выглядеть будет. Но так делают, да?
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Егор Юдин
Аа.. так можно делать? Просто.. а как понять на какую таблицу ссылается consumer_id, только по consumer_type? Выходит, что консьюмером может быть любая сущность. Я такого раньше не делал, использую орм, пока не представляю как это выглядеть будет. Но так делают, да?
Ну это вот то, что первое пришло в голову после озвучивания прикладной задачи. Но оно точно проще, нежели безуспешно костылить какие-то ограничения.
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
На самом деле, всё ещё проще: в storageitem добавить столбцы consumer_id и comsumer_type, т.к. связь 1-к-1.
источник

b

batyrmastyr in pgsql – PostgreSQL
Егор Юдин
Аа.. так можно делать? Просто.. а как понять на какую таблицу ссылается consumer_id, только по consumer_type? Выходит, что консьюмером может быть любая сущность. Я такого раньше не делал, использую орм, пока не представляю как это выглядеть будет. Но так делают, да?
У вас для пользовательских файлов есть ещё какие-то дополнительные поля, а для  "продуктовых" - другие?
источник

ЕЮ

Егор Юдин in pgsql – PostgreSQL
batyrmastyr
У вас для пользовательских файлов есть ещё какие-то дополнительные поля, а для  "продуктовых" - другие?
могут быть
источник

ЕЮ

Егор Юдин in pgsql – PostgreSQL
пока не очень понятно
источник

ЕЮ

Егор Юдин in pgsql – PostgreSQL
может быть бул IsDefault, например..
источник

ДМ

Дмитрий Мачихелян... in pgsql – PostgreSQL
Если в psql заинсертить пустую строку - это будет null или пустая строка?
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Дмитрий Мачихелян
Если в psql заинсертить пустую строку - это будет null или пустая строка?
psql - это вообще-то штатный клиент, как в него что-то заинсертить?! о_О
источник

ДМ

Дмитрий Мачихелян... in pgsql – PostgreSQL
Ладно, если в таблицу в БД postgres заинсертить пустую строку строку - будет пустая строка или нет
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Дмитрий Мачихелян
Ладно, если в таблицу в БД postgres заинсертить пустую строку строку - будет пустая строка или нет
Да, будет пустая строка (если вставить в поле текстового типа строку '', конкретно).
С чего бы PostgreSQL искажать вставляемое?
источник