Size: a a a

pgsql – PostgreSQL

2021 March 15

А

Андрей in pgsql – PostgreSQL
привет, подскажите. Кто как реализовывал чат?
Чат возможен только между двумя персонами.
Пока вижу два варианта:
1. Одна таблица с полями (айдиЮзер1, айдиЮзер2, смс1,смс2 и время по каждому полю)
2. Две таблицы в первой айди комнаты, во второй сборник всех смс с ключем комнаты
источник

P

Petr in pgsql – PostgreSQL
Андрей
привет, подскажите. Кто как реализовывал чат?
Чат возможен только между двумя персонами.
Пока вижу два варианта:
1. Одна таблица с полями (айдиЮзер1, айдиЮзер2, смс1,смс2 и время по каждому полю)
2. Две таблицы в первой айди комнаты, во второй сборник всех смс с ключем комнаты
А зачем в варианте (1) поле «смс2» ? Почему не достаточно связки (from;to;message) ?
источник

А

Андрей in pgsql – PostgreSQL
Petr
А зачем в варианте (1) поле «смс2» ? Почему не достаточно связки (from;to;message) ?
не совсем понял что имеете ввиду, можно подробней плиз
источник

А

Андрей in pgsql – PostgreSQL
Или понял, наверное так
from - Andrew
to - Petr
msg - text

or
from - Petr
to - Andrew
msg - new text
источник

P

Petr in pgsql – PostgreSQL
Андрей
не совсем понял что имеете ввиду, можно подробней плиз
Я говорю о создании таблицы со столбцами:
id сообщения; id отправителя; id получателя; текст сообщения; timestamp сообщения

Хранения такой информации достаточно чтобы это потом развернуть в виде чата.
источник

А

Андрей in pgsql – PostgreSQL
да. понял, спасибо.
А как думаете, стоит ли разбить на две таблицы ?
источник

P

Petr in pgsql – PostgreSQL
Андрей
да. понял, спасибо.
А как думаете, стоит ли разбить на две таблицы ?
Без каких-либо дополнительных условий — нет, не стоит. В этом нет никакого смысла.
Если бы у вас были комнаты для общения N пользователей ещё бы можно было подумать.
А тут строго наблюдается отправитель и получатель, как старые добрые смс в телефоне.
источник

А

Андрей in pgsql – PostgreSQL
Да, строго два юзера.
Спасибо большое за беседу и подсказку!
источник

AK

Alexander Kabolov in pgsql – PostgreSQL
Всем привет - подскажите пожалуйста, стоит задача повесить на существующую колонку уникальный constraint но не на всю таблицу а в зависимости от другого поля (например id задач дожны быть уникальны на одного пользователя user_id, а у разных пользователей айдишники задач могут повторяться), нагуглил что-то похожее с индексами но немного не понял как работает
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alexander Kabolov
Всем привет - подскажите пожалуйста, стоит задача повесить на существующую колонку уникальный constraint но не на всю таблицу а в зависимости от другого поля (например id задач дожны быть уникальны на одного пользователя user_id, а у разных пользователей айдишники задач могут повторяться), нагуглил что-то похожее с индексами но немного не понял как работает
Unique constraints могут быть на сочетание полей, а уж уникальные индексы — и на выражения и их сочетания, и с условием (фильтрацией)... непонятно, что именно Вам нужно.
источник

AK

Alexander Kabolov in pgsql – PostgreSQL
Yaroslav Schekin
Unique constraints могут быть на сочетание полей, а уж уникальные индексы — и на выражения и их сочетания, и с условием (фильтрацией)... непонятно, что именно Вам нужно.
Если предаставить что в таблице есть 2 поля task_id и user_id и у user_id есть много task_id то для конкретного юзера (например user_id = 1) все task_id должны быть уникальны (например: task_ids: 1,2,3,4,5 но не 1,2,2,3,4), а для user_id = 2 task_ids могут быть 1,2,3,4,5 (тоесть такие же как у юзера 1) мне нужно создать такой alter table лучше просто через unique constrains
источник

SG

Sergey Gerasimov in pgsql – PostgreSQL
Alexander Kabolov
Если предаставить что в таблице есть 2 поля task_id и user_id и у user_id есть много task_id то для конкретного юзера (например user_id = 1) все task_id должны быть уникальны (например: task_ids: 1,2,3,4,5 но не 1,2,2,3,4), а для user_id = 2 task_ids могут быть 1,2,3,4,5 (тоесть такие же как у юзера 1) мне нужно создать такой alter table лучше просто через unique constrains
А нельзя составной по 2м полям?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alexander Kabolov
Если предаставить что в таблице есть 2 поля task_id и user_id и у user_id есть много task_id то для конкретного юзера (например user_id = 1) все task_id должны быть уникальны (например: task_ids: 1,2,3,4,5 но не 1,2,2,3,4), а для user_id = 2 task_ids могут быть 1,2,3,4,5 (тоесть такие же как у юзера 1) мне нужно создать такой alter table лучше просто через unique constrains
ALTER TABLE <your_table> ADD UNIQUE(user_id, task_id);
что ли?
источник

AK

Alexander Kabolov in pgsql – PostgreSQL
Sergey Gerasimov
А нельзя составной по 2м полям?
Честно говоря даже тяжело сказать - по сути схоже конечно что нельзя будет добавить дубликат - но это же просто будет как составной primary key?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alexander Kabolov
Честно говоря даже тяжело сказать - по сути схоже конечно что нельзя будет добавить дубликат - но это же просто будет как составной primary key?
Хмм... я пока не вижу проблем / отличий от того, что было нужно (по описанию).
Или что-то не так, всё-таки?
источник

AK

Alexander Kabolov in pgsql – PostgreSQL
Yaroslav Schekin
ALTER TABLE <your_table> ADD UNIQUE(user_id, task_id);
что ли?
По сути вот так - чтобы была ощибка при попытке добавить дубликат task_id к конкретному юзеру
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alexander Kabolov
По сути вот так - чтобы была ощибка при попытке добавить дубликат task_id к конкретному юзеру
Вы попробовали? Что работает не так (потому что я... см. выше)?
источник

AK

Alexander Kabolov in pgsql – PostgreSQL
Yaroslav Schekin
Вы попробовали? Что работает не так (потому что я... см. выше)?
Сейчас как раз попробую
источник

AK

Alexander Kabolov in pgsql – PostgreSQL
Yaroslav Schekin
Вы попробовали? Что работает не так (потому что я... см. выше)?
Вроде как все работает, спасибо! А как правильно это называется? Составной ключ?
источник

UV

U Ver in pgsql – PostgreSQL
Привет ребят.
Подскажите, хочу посчитать значения payment за месяц, но считает за все время, что не так?
select id,
      date,
      payment,
      sum(payment) over (order by date) as total_per_month
from payments
источник