@sadsdasdasdsadsadsadsadsa
WEB developer

MySQL — CURRENT_TIMESTAMP + MILLISECONDS как первичный ключ для чата?

Есть задача написать чат (что-то типа службы поддержки для пользователей). Решил сделать 2 таблицы для хранения, 1-я `chat` - поля:

`id` (UNSIGNED BIGINT 20 PRIMARY KEY ))
`created_at` - DATETIME DEFAULT CURRENT_TIMESTAMP
`opened_by` - ID пользователя кто открыл чат
`accepted_by` - ID пользователя (support) тот кто принял чат в работу

2-я таблица с сообщениями `chat_messages` - поля:
chat_id - FOREIGN KEY `chat.id` (ID чата, внешний ключ на chat.id)
created_at - DATETIME DEFAULT CURRENT_TIMESTAMP дата создания сообщения
sender - UNSIGNED TNINYINT 1 - (либо 0 либо 1, где 0 это сообщение от chat.opened_by, 1 - от chat.accepted_by)
recipient_id - ID пользователя получателя
message - текстовое сообщение
status - TNINYINT 1 (статус чата, что то типа открыт/закрыт, потом кроном закрытые чаты буду переносить в архив и удалять их соответственно из таблиц chat, chat_messages)
Уникальный ключ `chat_id`, `created_at`, `sender_id`, `recipient_id`

Проблема в том, что в одну секунду можно отправить только одно сообщение, то есть, например если пользователь отправит 2 сообщения в одно и то же время (например в 13-01-2022 12:15:33), то будет ошибка уникальности ключа, можно ли как-то хранить еще миллисекунды для уникальности ключа? То есть, чтобы первичный ключ выглядел примерно так - `chat_id`, `created_at`, `sender_id`, `recipient_id`, `milliseconds`.

Первичный ключ в виде UNSIGNED BIGINT 20 делать не хочу тк не знаю как быстро заполнится таблица сообщений.

Может будут какие то другие варианты?
  • Вопрос задан
  • 54 просмотра
Пригласить эксперта
Ответы на вопрос 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Используйте UUID
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы