Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Проектирование БД Новый топик    Ответить
 Индивидуальное id для пользователя  [new]
YolleR
Member

Откуда:
Сообщений: 8
Созрел вопрос, как реализовать структуру бд, в которой есть таблицы:
- пользователи (ид)
- сообщения (ид, ид пользователя, текст)

Как сделать, что бы ид сообщения назначался для пользователя?
То есть, если первый пользователь написал сообщение, то второй пользователь после написания сообщения получит ид 1 (т.к. это его первое сообщение)
14 авг 19, 01:44    [21948744]     Ответить | Цитировать Сообщить модератору
 Re: Индивидуальное id для пользователя  [new]
antand
Member

Откуда: Москва
Сообщений: 596
YolleR,

Ключевой вопрос - с какой целью?
Если это нужно для упорядочения сообщений по времени появления, то добавьте дату сообщения и сортируйте
Да и по ид можно сортировать, если он будет PK, назначаем по счетчику.
Если уж так хочется именно нумерацию в таблице именно для пользователя, то добавьте поле номер и при добавлении вычисляйте его по MAX(номер) +1 в пределах этого пользователя. Но не рекомендую этот номер использовать в PK
14 авг 19, 09:22    [21948817]     Ответить | Цитировать Сообщить модератору
 Re: Индивидуальное id для пользователя  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 780
YolleR,

В таблице сообщений должно быть два id - id отправителя и id получателя. Если вы посмотрите популярные мессенджеры, то они позволяют просматривать переписку между двумя "абонентами". Без двух id это никак не сделать. Также должно быть два таймштампа (или больше) - отправления и прочтения.
14 авг 19, 10:29    [21948875]     Ответить | Цитировать Сообщить модератору
 Re: Индивидуальное id для пользователя  [new]
kolobok0
Member

Откуда:
Сообщений: 1951
YolleR,

завести поле id, назначить ему авто инкремент.
или что не так в этом предложении?

для суровых программеров(или убогих бд) подойдёт эта хрень

как то так
(круглый)
14 авг 19, 20:07    [21949600]     Ответить | Цитировать Сообщить модератору
 Re: Индивидуальное id для пользователя  [new]
YolleR
Member

Откуда:
Сообщений: 8
KreatorXXI
YolleR,

В таблице сообщений должно быть два id - id отправителя и id получателя. Если вы посмотрите популярные мессенджеры, то они позволяют просматривать переписку между двумя "абонентами". Без двух id это никак не сделать. Также должно быть два таймштампа (или больше) - отправления и прочтения.


Вопрос как раз и связан с популярными мессенджерами.
Если посмотреть на сообщения, например на сайте вконтакте, то каждое моё сообщение имеет уникальный ID начинающийся с 0, именно для меня. Сколько бы в базу не добавлялись сообщения от других пользователей, я всегда мог бы получить своё сообщение по ID с 0, и до моего последнего сообщения.

Если сравнить с простым ID, то ID сообщения было бы общим для всех, т.е. если до меня в бд уже лежал 1 млн чужих писем, ид моего сообщения будет 1000001. НО, мне необходимо предоставить пользователю возможность перехода по адресу сайт.хх/message/1 (например). То есть проще говоря, у каждого пользователя свои ID сообщений.

У вк я так подразумеваю на каждого пользователя генерируются новые таблицы. (Мнение)
Есть ли возможность реализовать это простым способом?

Проверять MAX(..) и присваивать уникальный ID самостоятельно, кажется затеей сомнительной, хотелось бы ещё вариантов.
14 авг 19, 20:48    [21949627]     Ответить | Цитировать Сообщить модератору
 Re: Индивидуальное id для пользователя  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48141

YolleR
Если посмотреть на сообщения, например на сайте вконтакте, то каждое моё сообщение имеет
уникальный ID начинающийся с 0, именно для меня.

Дизайн вконтакта это его проблемы. Кажется, там БД вообще нет, какая-то in-memory nosql
свалка.

Posted via ActualForum NNTP Server 1.5

14 авг 19, 20:51    [21949628]     Ответить | Цитировать Сообщить модератору
 Re: Индивидуальное id для пользователя  [new]
YolleR
Member

Откуда:
Сообщений: 8
Dimitry Sibiryakov
YolleR
Если посмотреть на сообщения, например на сайте вконтакте, то каждое моё сообщение имеет
уникальный ID начинающийся с 0, именно для меня.

Дизайн вконтакта это его проблемы. Кажется, там БД вообще нет, какая-то in-memory nosql
свалка.

Вопрос и не был адресован к ВКонтакте.
Вопрос в реализации такого вида id
14 авг 19, 20:58    [21949631]     Ответить | Цитировать Сообщить модератору
 Re: Индивидуальное id для пользователя  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48141

YolleR
Вопрос в реализации такого вида id

А в чём вопрос-то? Неужели хранить в таблице пользователей счётчик его сообщений и
увеличивать его на единицу при создании нового сообщения это такая запредельная вещь?

PS: Чтобы догадаться про вытекающий из этого геморрой тоже вроде как не нужно быть гением.

Posted via ActualForum NNTP Server 1.5

14 авг 19, 22:07    [21949655]     Ответить | Цитировать Сообщить модератору
 Re: Индивидуальное id для пользователя  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 780
YolleR

Вопрос как раз и связан с популярными мессенджерами.
Если посмотреть на сообщения, например на сайте вконтакте, то каждое моё сообщение имеет уникальный ID начинающийся с 0, именно для меня. Сколько бы в базу не добавлялись сообщения от других пользователей, я всегда мог бы получить своё сообщение по ID с 0, и до моего последнего сообщения.


Это вопрос реализации. Может быть этот id не хранится, а считается на лету. В принципе, можно и хранить. Не вижу особо проблем. Смысл хранения следующий. Не относящийся к Вашей проблеме. Как пример. Храним документы в одной таблице для разных подразделений холдинга. Нумерация должна быть своя для каждого подразделения. Поэтому дешевле хранить для каждого подразделения некий номер в базе нежели каждый раз считать максимальный. Может даже не дешевле, а проще. Но, повторюсь, в Вашем случае это не надо. Достаточно id отправителя и получателя.

PS. В Ватсаппе я, например, не вижу эти id. Да и вообще, считаю, нонсенс помнить какие-то цифры. Ячеек памяти в мозгу не так много, чтобы помнить, что сообщение в Контакте с id=12345 от Пети Иванова.
15 авг 19, 10:35    [21949853]     Ответить | Цитировать Сообщить модератору
 Re: Индивидуальное id для пользователя  [new]
ldfanate
Member

Откуда:
Сообщений: 130
Храним документы в одной таблице для разных подразделений холдинга. Нумерация должна быть своя для каждого подразделения. Поэтому дешевле хранить для каждого подразделения некий номер в базе нежели каждый раз считать максимальный. Может даже не дешевле, а проще.


Да это жесть вообще, считать SELECT (MAX)+1 в многопользовательских СУБД. Неужели ктото досихпор такие корявые реализации делает? Сериализуемый счётчик должен быть.
30 авг 19, 12:13    [21960453]     Ответить | Цитировать Сообщить модератору
 Re: Индивидуальное id для пользователя  [new]
experience
Member

Откуда: Новосибирск
Сообщений: 154
YolleR
Dimitry Sibiryakov
пропущено...

Дизайн вконтакта это его проблемы. Кажется, там БД вообще нет, какая-то in-memory nosql
свалка.

Вопрос и не был адресован к ВКонтакте.
Вопрос в реализации такого вида id


Я могу ошибаться, но мой опыт подсказывает, что ваша проблема в том, вы представляете показанное на экране в других системах в точности соответствующее логике внутреннего хранения.
Оторвите одно от другого в голове и допустите наличие алгоритмической прокладки между показом и хранением и способы реализации начнут у вас в голове появляться пока не остановитесь и не скажите что все они правильные, потому что ваши и давай ка я сегодня выберу например такой.
15 сен 19, 07:10    [21971063]     Ответить | Цитировать Сообщить модератору
Все форумы / Проектирование БД Ответить