|
|
|
Вопрос о проектировании
|
|||
|---|---|---|---|
|
#18+
Приветствую! Вот раньше использовал базу MySQL. там следующий ID был auto_increment Теперь хочу использовать серьезную базу. и вот натолкнулся на проблему: нужны уникальные номера документов ID если делать через SEQUENCE то при откате транзакции поле SEQUENCE увеличится, т.е произойдет пробел в номерах документов (123,124,125,127), что не может понравиться заказчику. А если получать max(id) прибавлять 1-у и делать INSERT-ы, то нужно использовать LOCK TABLE, что создаст неудобства, если много будет пользователей. Как же грамотно спроектировать базу, что бы удовлетворить всех? Заранее благодарен за Ваши советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 16:33:28 |
|
||
|
Вопрос о проектировании
|
|||
|---|---|---|---|
|
#18+
Используй IDENTITY на столбце ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 16:35:35 |
|
||
|
Вопрос о проектировании
|
|||
|---|---|---|---|
|
#18+
Очевидно, сделать без пробелов в номерах документов без блокировки нельзя чисто теоретически, на любой СУБД. Десять п. одновременно начали транзакцию. Вставили записи. И потом 5 откатилось. И всё... Так что только max(id) и блокировка. К сожалению, в MSSQL при роллбаке транзакции счётчик не откатывается, а так можно было-бы и с identity клонкой. Но блокировка на всю таблицу была-бы нужна и в этом случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 16:42:03 |
|
||
|
Вопрос о проектировании
|
|||
|---|---|---|---|
|
#18+
ИМХО ID записи заказчик вообще не должен видеть. В качестве ID лучше всего использовать суррогатный ключ (подчеркиваю - ИМХО, т.к. вопрос спорный), который можно формировать с помощью IDENTITY или NEWID(), а заказчику "подсовывать" номера документов в том виде, как он пожелает. И пусть он (заказчик) пребывает в убеждении, что это - и есть ID ;0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 16:50:56 |
|
||
|
Вопрос о проектировании
|
|||
|---|---|---|---|
|
#18+
Точно, а то вдруг через полгода он захочет их редактировать. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 17:02:01 |
|
||
|
Вопрос о проектировании
|
|||
|---|---|---|---|
|
#18+
2 alexeyvg Не надо max(id) и блокировки таблицы, достаточно завести собственный счетчик и тогда блокировать придется только строку счетчика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 17:09:11 |
|
||
|
Вопрос о проектировании
|
|||
|---|---|---|---|
|
#18+
2Genady Ну да, я имел в виду блокировку таблици на добавление. 2Дмитрий Орлов По-моему, это самое правильное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 17:34:06 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1821855]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 321ms |

| 0 / 0 |
