powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Счетчик для версионника - как?
25 сообщений из 39, страница 1 из 2
Счетчик для версионника - как?
    #32845495
Дамир1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Прочитал статейку о том, что Юкон уже поддерживает версионность:
http://www.rsdn.ru/article/db/yukonvers.xml
и некоторую перебранку: http://www.sql.ru/forum/actualthread.aspx?tid=145611
Ув. гуру! просьба не издеваться, а дать решение для версионника простенькой задачки.
Сам я работаю с MSSQL2000 и плохо представляю как такое можно сделать на версионнике. Задачка простая - самодельный счетчик типа int.
Итак:
1) есть таблица счетчиков: create table Counters( CounterId int, CounterVal int )
2) есть таблица 'чего-нибудь' c PK, значение которого берется из Counters (с инкрементом): create AA( PK int, Attr char(10))

для блокировочника:

declare @n int
begin tran
update counters set CounterVal = CounterVal+1, @n = CounterVal where CounterId = 10

insert into AA select @n, 'Attrib'
commit

PS:
1) Про автоинкрементные поля я знаю, но у нас софт (чужой) работает именно так. Причем, счетчиков (дыже для одной таблицы АА может быть несколько).
2) Уровень изоляции подразумевается Read Commited, не желательно его менять.
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32845506
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему бы для этого не использовать генераторы уникальных последовательностей?
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32845511
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
для этого существуют специальные объекты - sequence, автоинкрементных полей в оракле нет (ненужны).
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32845515
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос который написал будет точно так же работать и на версионнике... потому что там изменение точно так же блокирует данные, как и на блокировочнике, чудес-то не бывает :)
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32845518
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo!для этого существуют специальные объекты - sequence, автоинкрементных полей в оракле нет (ненужны).
То же самое и в InterBase... причем они работают вне контекста транзакции.
Интересно не появились ли sequence в юконе?
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32845660
Дамир1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за живое участие!
2Серега, Yo!, Dik76 :
интересно, а в Юконе уже есть sequence? Если нет, то как-то странно получится: версионность поддерживают, а sequence нет....
В принципе, в MSSQL есть автоинкрементные поля и работают они тоже вне контекста транзакции. Но это не то... задачу изменять придется...

2 Alex.Czech: я сомневаюсь, что запрос будет работать так же - на то он и версионник. представьте, что вставка с одним значением счетчика идет не в 1 таблицу АА, a в 10 (т.е. достаточно длительная - пару секунд + с конкуренция с другими такими же транзакциями)
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32845698
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверняка sequence в том или ином виде появятся в следующей версии СУБД от Microsoft и они как всегда назовут их "революционной технологией"
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32845750
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дамир1Спасибо за живое участие!
2Серега, Yo!, Dik76 :
интересно, а в Юконе уже есть sequence? Если нет, то как-то странно получится: версионность поддерживают, а sequence нет....
В принципе, в MSSQL есть автоинкрементные поля и работают они тоже вне контекста транзакции. Но это не то... задачу изменять придется...

2 Alex.Czech: я сомневаюсь, что запрос будет работать так же - на то он и версионник. представьте, что вставка с одним значением счетчика идет не в 1 таблицу АА, a в 10 (т.е. достаточно длительная - пару секунд + с конкуренция с другими такими же транзакциями)

Ну и что ? Произошел update - значит, строка в таблице заблокирована до конца транзакции. И это верно как в блокировочнике, так и в версионнике. Отличие в том, что ЧТЕНИЕ не блокирует данные, с записью никаких различий нет
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32845756
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я очень сомневаюсь, что в MS SQL в ближайшее время появится sequence - там уже есть identity, ублюдочный, но аналог
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32845758
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем не нравится?

-- Tygra's --
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32845766
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tygraА чем не нравится?


Чем не нравится identity ? Тем, что как это нередко бывает у MS, за меня многое решили Я могу использовать identity только для автоинкрементного значения в одной таблице, и все. Sequence по возможностям богаче, и хотя в 95% случаев этого не нужно, но зато в тех 5% когда занадобится, в MS SQL начинаются геморрои и всякие залипухи
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32845781
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
значение SQUENCE я знаю до того, как начал транзакцию, а идентити - после
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32845804
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть еще одна прикольная фича в Sybase ASE
Во всех базах данных timestamp - временная метка - просто тип данных, а тут...) все по особому...

create table #TTT (ts1 timestamp,ts2 timestamp)
go


Sybase ASE:
Server Message: Number 2738, Severity 16
Server 'pnsybase', Line 1:
A table can only have one timestamp column. Since table '#TTT_________00000770013300781' already has one, you can't add the column 'ts2'.

MSSQL:
Server: Msg 2738, Level 16, State 2, Line 1
A table can only have one timestamp column. Because table '#TTT' already has one, the column 'ts2' cannot be added.

db2 => connect to test3

Информация соединения с базой данных

Сервер баз данных = DB2/NT 8.2.0
ID авторизации SQL = DB2ADMIN
Алиас локальной базы данных = TEST3

db2 => create table ttt(ts1 timestamp,ts2 timestamp)
DB20000I Команда SQL выполнена успешно.
db2 =>
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32845806
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В MS SQL то же самое с timestamp. Это на самом деле совсем не тот же timestamp что в Оракл или DB2, просто однофамилец :)
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32845935
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторзначение SQUENCE я знаю до того, как начал транзакцию, а идентити - после
А зачем вам до ? Привычки файл-серверного программирования о себе знать дают?

-- Tygra's --
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32848922
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если задачу усложнить и вместо счетчика будет более сложная величина. Допустим текущие остатки по товару на складе? Я так понимаю тут sequence не поможет...
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32848950
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CripА если задачу усложнить и вместо счетчика будет более сложная величина. Допустим текущие остатки по товару на складе? Я так понимаю тут sequence не поможет...
А если решать задачу обработки видео в реальном времени, то тут БД ваще не катит.
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32848968
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote]
А зачем вам до? Привычки файл-серверного программирования о себе знать дают?
[/quote]
Номер счета например видеть хорошо бы до сохранения.
Удобнее вставки подчиненных записей сразу же знать идентификатор родительской.
Потом, те же партишин-вью организовать не по int-полю, а по varchar, типа 1B,1C,1D, где B,C,D например - идентифицирует филиал (это когда репликация нужна). Про "достоинства" разеделения identity по диапазонам в mssql, надеюсь не нужно объяснять.
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32849011
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА если решать задачу обработки видео в реальном времени, то тут БД ваще не катит
Вообще-то конкретный вопрос был задан, а вы мне какую-то пургу. В Oracle я не специалист, потому и спрашиваю...
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32849037
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CripВообще-то конкретный вопрос был задан, а вы мне какую-то пургу. В Oracle я не специалист, потому и спрашиваю...
Это ты пургу спросил. По твоему "текущие остатки по товару на складе" - это усложнение начальной задачи "счетчик"? ИМХО, это вообще другая задача. О ней недавно ветка была - http://]http://www.sql.ru/forum/actualthread.aspx?tid=145611
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32849108
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНомер счета например видеть хорошо бы до сохранения.
Зачем?
авторУдобнее вставки подчиненных записей сразу же знать идентификатор родительской.
Аналогично. Вставите родительскую - получите значение, тогда вставляйте подчиненные.


-- Tygra's --
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32849168
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>>Зачем?
Затем
>>>Аналогично. Вставите родительскую - получите значение, тогда вставляйте подчиненные
Я с клиента одним пакетом вставляю. А на клиенте, к примеру, два связанных датасета. И что я тогда в подчиненную запись подставлю для связи с родительской? -1? 0?
Правильно - GUID сгенерить на клиенте (это по поводу identity, так зачем мне он).
А гьюид разбалонсированный получается. Попробуй наверни на него партишин вью, наполнение партишин - непредсказуемо будет, количество партишин - постоянно (условия от A до Z), индексы на гьюид в таблицах - разбалансированы.
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32849454
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каким пакетом? Что, не можете сначала вставить родительскую, потом дочерние с полученным значением? Ну странно.
Одним пакетом в две таблицы одновременно все-равно не вставить, как не старайся :)

В общем, это только отговорки и привычка - куча людей работает с identity, вставляет мастер-детайл и все хорошо получается. Потому я с тем же успехом могу сказать: как же вы это без identity работаете!!!??? Непорядок! :))

-- Tygra's --
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32849471
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
2tygra

а как можно было бы в моей задаче поступить. есть серификаты, там одна табличка, есть там id, cert_no, type. для различных типов своя нумерация начинающаяся с 1, у меня сейчас на каждый тип свой сиквенс, а как с автоинкрементом такое ?
...
Рейтинг: 0 / 0
Счетчик для версионника - как?
    #32849520
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю. Зачем им собственная нумерация? Странно как-то.

Ну я бы сделал через max(id)+1, если уж так нужно было бы. Но все же постарался бы сделать сквозную нумерацию.

-- Tygra's --
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Счетчик для версионника - как?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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