Я пытаюсь создать таблицу в postgresql для хранения пользовательских рабочих элементов. Каждый рабочий элемент будет иметь уникальный идентификатор в системе, но затем также будет иметь дружественный последовательный идентификатор для этого конкретного пользователя.Как создать последовательный идентификатор пользователя в Postgresql
До сих пор я был только с помощью:
CREATE TABLE WorkItems
(
Id SERIAL NOT NULL PRIMARY KEY,
...
);
, но я не знаю, как полочки этого сериала для каждого пользователя, и как сделать это с последовательностями либо.
Так что я хочу для пользователей, чтобы увидеть последовательные дружественных Идентификаторы
User1: ids = 1, 2, 3 etc.. User2: ids = 1, 2, 3, 4, 5 etc..
и не приходится иметь дело с уникальными идентификаторами, но эти элементы будут иметь уникальные идентификаторы 1-8.
Я немного огляделся и не могу найти сообщений по этой теме. Может быть, это просто сложно указать и искать?
Должен ли я хранить LastWorkIdUsed в столбце пользователя, а затем просто вручную создавать дружественный идентификатор для своих элементов? Похоже, что мне необязательно беспокоиться о параллелизме и транзакциях. Есть ли простой способ передать LastWorkIdUsed для каждого пользователя Postgresql при генерации числа?
Или есть способ назначить последовательность пользователю?
Возможно, у меня фундаментальная идея дизайна неправильная. Как это сделать в SQLServer или MySQL?
Вы должны выполнить ЗЕЬЕСТ для получения значения MAX в WorkItem Пользователь WHERE является указанным пользователем. Затем добавьте 1 к нему, и это станет вашим новым номером пользователя/рабочего номера. –
Нет такого понятия, как дружественный идентификатор. Если пользователи видят идентификационные номера, я гарантирую, что они не будут заботиться о том, являются ли они последовательными или нет. –
@RobertHarvey: Вы забыли обо всех записях за столами, которые необходимы для того, чтобы этот подход работал. Если никогда не будет более одного соединения с базой данных за раз, поэтому вам не придется беспокоиться о гоночных условиях. –