Re[10]: бездырочная нумерация
От: developer.cpp Россия  
Дата: 15.04.15 22:13
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, developer.cpp, Вы писали:


d>> я посмотрел, в sqlite3 rownum не работает + подумал, что когда пользователь работает со справочником перестроить справочник при редком удалении строк совсем не заметно. А вот что то вычислять вдобавок к итак трудоемкому алгоритму не стал.


W>Зачем rownum? В приложении, получив очередную строку, сделать i++ сложно что ли?


после select с порцией строк заполение многомерного массива происходит так:
while( sqlite3_step(stmt) == SQLITE_ROW ){
     i1 = sqlite3_column_int(stmt,0);
     i2 = sqlite3_column_int(stmt,1);
     i3 = sqlite3_column_int(stmt,2);
     i4 = sqlite3_column_int(stmt,3);
     // ...
     u[i1][i2][i3][i4] = ...
}
Re[11]: бездырочная нумерация
От: wildwind Россия  
Дата: 16.04.15 04:08
Оценка:
Здравствуйте, developer.cpp, Вы писали:

d> у меня много индексов i1, i2, i3, i4 --- при получении новой строки неизвестно какому делать ++ ...


А какой из них ты хочешь перенумеровать?
avalon/1.0.442
Re[12]: бездырочная нумерация
От: developer.cpp Россия  
Дата: 16.04.15 13:17
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, developer.cpp, Вы писали:


d>> у меня много индексов i1, i2, i3, i4 --- при получении новой строки неизвестно какому делать ++ ...


W>А какой из них ты хочешь перенумеровать?


все, каждыйиндекс из своего справочника, справочники однотипные
Re[13]: бездырочная нумерация
От: wildwind Россия  
Дата: 16.04.15 19:31
Оценка:
Здравствуйте, developer.cpp, Вы писали:

d> d>> у меня много индексов i1, i2, i3, i4 --- при получении новой строки неизвестно какому делать ++ ...

d> W>А какой из них ты хочешь перенумеровать?
d> все, каждыйиндекс из своего справочника, справочники однотипные

Так еще и справочников много, и все нужно перенумеровывать? Извини, я окончательно запутался, и без понимания исходной задачи вряд ли смогу посоветовать что-то еще.

P.S. Но нутром чую косяки в дизайне базы.
avalon/1.0.442
Re: бездырочная нумерация
От: MasterZiv СССР  
Дата: 17.04.15 13:53
Оценка:
Здравствуйте, developer.cpp, Вы писали:

DC>После удаления строк, во множестве значений автоинкрементных первичных ключей idx записей появляются "дырки":


Значения первичного ключа не важны, важно, чтобы они только были уникальные.
Так что ничего чинить не надо.

Если тебе нужны в возр. порядке идущие номера -- создай отдельное поле, скопируй туда значение ID, и затем
независимо его назначай и корректируй.
Re[7]: бездырочная нумерация
От: MasterZiv СССР  
Дата: 17.04.15 13:56
Оценка:
Здравствуйте, developer.cpp, Вы писали:

W>>2. Если данные не в справочниках, а в других таблицах, то что в данном справочнике? Только номера, а в других таблицах FK ссылки на него?


DC>данные для обработки в других таблицах. Средствами СУБД их анализировать накладно, анализ делает специализированная числодробилка на C++.


DC>данные вытаскиваются в многомерный массив u[i1][i2][i3][i4][i5], представляющий собой интерфейс к одномерному массиву. i1 --- номер из первого спраочника, i2 --- номер из второго справочника ...


DC>Если i1 --- это индекс из "бездырочной нумерации" то по этому индексу запись делается сразу же в нужный участок памяти, и если i1 первичный ключ из множества

DC>с дырками, то нужно вычислять что же это за элемент массива u


Ну, тут налицо ошибка в проектировании твоей программы на С++.
Тебе надо использовать не массив, а std::map или его аналоги.
БД тут ни при чём.

Ещё раз -- нельзя накладывать на поля PK никакие доп. требования из предметной области, кроме уникальности.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.