Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос о проектировании / 8 сообщений из 8, страница 1 из 1
11.07.2002, 16:33:28
    #32036282
Romantik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос о проектировании
Приветствую!
Вот раньше использовал базу MySQL.
там следующий ID был auto_increment
Теперь хочу использовать серьезную базу.
и вот натолкнулся на проблему:
нужны уникальные номера документов ID
если делать через SEQUENCE то при откате транзакции
поле SEQUENCE увеличится, т.е произойдет пробел в номерах документов (123,124,125,127), что не может понравиться заказчику. А если получать max(id) прибавлять 1-у и делать INSERT-ы, то нужно использовать LOCK TABLE, что создаст неудобства, если много будет пользователей.
Как же грамотно спроектировать базу, что бы удовлетворить всех?
Заранее благодарен за Ваши советы.
...
Рейтинг: 0 / 0
11.07.2002, 16:35:35
    #32036283
Panov Vitaly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос о проектировании
Используй IDENTITY на столбце
...
Рейтинг: 0 / 0
11.07.2002, 16:42:03
    #32036288
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос о проектировании
Очевидно, сделать без пробелов в номерах документов без блокировки нельзя чисто теоретически, на любой СУБД.
Десять п. одновременно начали транзакцию. Вставили записи. И потом 5 откатилось. И всё...
Так что только max(id) и блокировка.
К сожалению, в MSSQL при роллбаке транзакции счётчик не откатывается, а так можно было-бы и с identity клонкой. Но блокировка на всю таблицу была-бы нужна и в этом случае.
...
Рейтинг: 0 / 0
11.07.2002, 16:50:56
    #32036292
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос о проектировании
ИМХО ID записи заказчик вообще не должен видеть.

В качестве ID лучше всего использовать суррогатный ключ (подчеркиваю - ИМХО, т.к. вопрос спорный), который можно формировать с помощью IDENTITY или NEWID(), а заказчику "подсовывать" номера документов в том виде, как он пожелает. И пусть он (заказчик) пребывает в убеждении, что это - и есть ID ;0)
...
Рейтинг: 0 / 0
11.07.2002, 17:02:01
    #32036300
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос о проектировании
Точно, а то вдруг через полгода он захочет их редактировать. :)
...
Рейтинг: 0 / 0
11.07.2002, 17:09:11
    #32036303
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос о проектировании
2 alexeyvg

Не надо max(id) и блокировки таблицы, достаточно завести собственный счетчик и тогда блокировать придется только строку счетчика.
...
Рейтинг: 0 / 0
11.07.2002, 17:34:06
    #32036315
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос о проектировании
2Genady
Ну да, я имел в виду блокировку таблици на добавление.

2Дмитрий Орлов
По-моему, это самое правильное решение.
...
Рейтинг: 0 / 0
11.07.2002, 17:37:57
    #32036317
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос о проектировании
>Ну да, я имел в виду блокировку таблици на добавление.

А я имел в виду блокировку строки в таблице. :-)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос о проектировании / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]