Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
jkrnd
164 / 54 / 11
Регистрация: 22.12.2015
Сообщений: 1,612
1

Упорядочить номера индексированного поля в таблице БД

15.09.2016, 04:59. Просмотров 876. Ответов 14
Метки нет (Все метки)

Всем здравствуйте.
При работе с таблицей БД MSAccess обратил внимание на значение в индексированном поле ID. Не смотря на то, что всего записей около 30-ти, значение поля ID измеряется трёхзначными цифрами. Добавляя 31-ю запись, например, Access присваивает ей ID = 905.
Как это влияет на производительность работы с базой данных и можно ли индексы перенумеровать заново начиная с единицы (как строки в Basic)? Нужно ли на это обращать внимание вообще?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2016, 04:59
Ответы с готовыми решениями:

Число индексов меньше числа измерений индексированного массива
Здравствуйте, помогите пожалуйста, в чем ошибка? В строке с вызовом функции...

Разработка приложения для более быстрого, индексированного поиска файлов по заданному имени (хэширование)
Задача: разработать приложение для более быстрого, индексированного поиска...

Создание поля типа Boolean в таблице базы данных .mdb
Доброго времени суток! Есть запрос: Create table new_table (Id Identity (1,...

Поиск записей в одной таблице, где значения ключевого поля не совпадают с полем в другой таблице
Имеется Access XP, надо создать запрос для поиска записей в таблице ТОВАРЫ,где...

Ошибка при создании поля таблицы и указании расположения поля в таблице
Пытаюсь создать поле с указанием его расположения в таблице. Пока...

14
Kulma
439 / 377 / 63
Регистрация: 25.07.2015
Сообщений: 687
15.09.2016, 08:01 2
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

Вы очевидно говорите про ключевое поле ID с автоинкрементом ?
Если да, то забудьте про него.
Числа в нём ни на что не влияют, а обозначают то количество записей, которое было внесено в таблицу
с момента её образования.
На момент конечного релиза можно обнулить счётчик , чтобы не путать конечного юзера, но в
процессе проектирования это пустая затея.
Обнуление производится двумя запросами :
первым вы удаляете поле счётчика
T-SQL
1
ALTER TABLE Таблица DROP COLUMN ID
вторым создаёте заново
T-SQL
1
ALTER TABLE Таблица ADD COLUMN ID counter
Теоретически можно и одним запросом , но работает не во всех версиях Access
T-SQL
1
ALTER TABLE Таблица ALTER COLUMN ID counter(1,1)
counter(1,1)- цифры здесь обозначают (начальное значение счётчика , приращение, т.е. на какую
величину он будет с каждой записью увеличиваться)
3
jkrnd
164 / 54 / 11
Регистрация: 22.12.2015
Сообщений: 1,612
15.09.2016, 09:07  [ТС] 3
Цитата Сообщение от Kulma Посмотреть сообщение
ключевое поле ID с автоинкрементом
да, я именно о нём
влепил на форму программы для пробы Button и вот, что получил:
0
Миниатюры
Упорядочить номера индексированного поля в таблице БД  
jkrnd
164 / 54 / 11
Регистрация: 22.12.2015
Сообщений: 1,612
15.09.2016, 09:09  [ТС] 4
интересно, а в ACCESS это нельзя сделать?
0
Yury Komar
Модератор
Эксперт .NET
2378 / 2184 / 348
Регистрация: 27.01.2014
Сообщений: 3,913
Завершенные тесты: 1
15.09.2016, 09:39 5
скорее всего это как раз таки уникальность полей вам и не дает этого сделать...
Как предлагали некоторые форумчане мне в решении этой проблемы - можно создать доп колонку с например хэш-суммой всей строки, что и будет выступать в роли уникального значения, в таком случае редактирование таблицы не будет блокировано...
2
XIST
1070 / 795 / 112
Регистрация: 01.10.2009
Сообщений: 2,446
Записей в блоге: 1
15.09.2016, 12:08 6
Цитата Сообщение от Kulma Посмотреть сообщение
ALTER TABLE Таблица DROP COLUMN ID
Уникальные поля для этого и уникальны, какие могут быть с ними действия, не даст база ключевое поле автоинкремент носиловть
1
Kulma
439 / 377 / 63
Регистрация: 25.07.2015
Сообщений: 687
15.09.2016, 12:24 7
Цитата Сообщение от jkrnd Посмотреть сообщение
влепил на форму программы для пробы Button и вот, что получил:
Разумеется.
Кто же это делает на рабочей таблице в процессе ?
Я же говорил не про сортировку столбца, а про сброс счётчика в исходное (или какое-то стартовое)
значение.
Каким чудесным образом уникальное поле со счётчиком начнёт отсчёт сызнова , если в таблице
уже есть записи ? Вся целостность БД рухнет одномоментно , когда счётчик дойдёт до первого уже
существующего значения. Я уж думал , что такие очевидные вещи понятны и без разъяснений.
Если короче , то
Для варианта ,ранее описанного :
- удаляем из таблицы все записи
- удаляем все внешние связи
- удаляем ключ по ID и уникальность по полю
- выполняем ранее приведённые запросы
- устанавливаем уникальность и ключ
- восстанавливаем внешние связи ( при условии , что в связанных таблицах так же удалены записи,
если записи есть , то выдаст ошибку целостности данных)

Вариант обнуления счётчика с сохранением основных данных тоже возможен, но достаточно муторный.
Так же рушатся внешние связи , потом создаётся промежуточная таблица из двух полей,
в котором одно поле новое значение счётчика , второе - старое , чтобы соотнести (правильно внести)
изменения в поля ID связанных таблиц . Потом выполняете цикл пробега по существующим строкам с запросом UPDATE по полю ID в основной таблице , чтобы внести новые значения , начиная со стартового с нужным приращением
(допустим 1,1) . Потом , основываясь на соотношениях промежуточной таблицы так же UPDATE по всем связанным
таблицам (допустим было значение 64 , стало 2) , потом ставите ключи, связи и вуаля...
Но самое главное во всей этой песне то , что ЭТО НА ФИГ НИКОМУ НЕ НУЖНО
Вот как-то так.

Добавлено через 1 минуту
Цитата Сообщение от XIST Посмотреть сообщение
Уникальные поля для этого и уникальны
Ну а кто мешает её снять , уникальность то , а потом восстановить ?
1
XIST
1070 / 795 / 112
Регистрация: 01.10.2009
Сообщений: 2,446
Записей в блоге: 1
15.09.2016, 12:27 8
Цитата Сообщение от Kulma Посмотреть сообщение
Ну а кто мешает её снять , уникальность то , а потом восстановить
это противоречит всем принципам B-Tree, ID - это есть целостность данных
1
Kulma
439 / 377 / 63
Регистрация: 25.07.2015
Сообщений: 687
15.09.2016, 12:34 9
XIST, да кто же спорит то про целостность?
Вы же как написали
Цитата Сообщение от XIST Посмотреть сообщение
не даст база ключевое поле автоинкремент носиловть
Ещё как даст , было бы желание. И поверьте , целостность не рухнет...))
Логику действий я описал выше, только зачем ?
1
XIST
1070 / 795 / 112
Регистрация: 01.10.2009
Сообщений: 2,446
Записей в блоге: 1
15.09.2016, 12:46 10
Цитата Сообщение от Kulma Посмотреть сообщение
Ну а кто мешает её снять , уникальность то , а потом восстановить
это противоречит всем принципам B-Tree, ID - это есть целостность данных
Цитата Сообщение от Kulma Посмотреть сообщение
Ещё как даст , было бы желание. И поверьте , целостность не рухнет
а я говорю не даст, 10 таблиц, с primary key и fk key, не измените Вы ID (Firebird), я Вам гарантирую. А вот это и есть целостность, что хочешь меняй, а ID будет с внешними ключами ссылаться на прообраз ID
1
jkrnd
164 / 54 / 11
Регистрация: 22.12.2015
Сообщений: 1,612
15.09.2016, 13:20  [ТС] 11
Цитата Сообщение от Kulma Посмотреть сообщение
ЭТО НА ФИГ НИКОМУ НЕ НУЖНО
я согласен, такие заморочки не нужны никому.
0
Kulma
439 / 377 / 63
Регистрация: 25.07.2015
Сообщений: 687
15.09.2016, 13:44 12
Цитата Сообщение от XIST Посмотреть сообщение
не измените Вы ID (Firebird), я Вам гарантирую.
Верю на слово )))
Никогда не развлекался с Firebird, по сему не могу оппонировать , увы, равно как по dbase,paradox и
многим многим другим БД ))

Не по теме:

Firebird у меня ассоциируется исключительно с автомобилем .
Ну не увлекался я никогда дельфями , что-ж поделать :)


Зато в mssql, sqlite,mysql,access,postrges эти процедуры проводятся достаточно легко,
правда трудоёмко : кол-во связанных с базовой таблицей внешних таблиц не имеет значения-хоть 10, хоть 100.
Если у вас есть диаграмма связей то это вполне реально и иногда даже необходимо.
Например , если у вас выполнялся какой-нибудь запрос вне транзакции и нежданчиком обрушилось
питание. В такой ситуации , если нет резервной копии, это будет чуть ли ни единственный способ
восстановить целостность.
Так что спор наш по факту ни о чём )))
1
XIST
1070 / 795 / 112
Регистрация: 01.10.2009
Сообщений: 2,446
Записей в блоге: 1
15.09.2016, 17:38 13
Цитата Сообщение от Kulma Посмотреть сообщение
Никогда не развлекался с Firebird, по сему не могу оппонировать
повторюсь, дело не в виде базы, дело в основах B-tree древа СУБД. Наличие FK и PK это гарантия целостности, и Вы да же самой базе с помощью какой-нибудь системы управления этой базой, будите получать ошибку о целостности ключей (хотя я и делал ). Но это костыликостыльные.
ример , если у вас выполнялся какой-нибудь запрос вне транзакции и нежданчиком обрушилось
питание
это уже дело разработчика, проверка после вставки, после падения ПО, после запуска, куча вариантов, и удаления не нужного(ошибочного) инсерта\апдейта. А так, для этого и есть СУБД. Которые за Вас это и выполяют, не прошла транзакция = откатывание и т.п.
1
Kulma
439 / 377 / 63
Регистрация: 25.07.2015
Сообщений: 687
15.09.2016, 18:46 14
XIST, вы всё верно говорите об основах B-tree , никто и не спорит. ))
Другой вопрос , что "не правильно" и "не возможно" совсем не одно и то же.
Мне тоже в бытность приходилось "поднимать" базы от безысходности , спотыкаясь об
"ошибки целостности". Возможно, имея такой опыт, мне и не кажется данная процедура
чем-то сверхестественным. Вполне допускаю , что далеко не во всех субд такой вариант прокатит,
но в тех , что мне приходилось столкнуться -прокатывало. Ну и разумеется это должен делать
специалист ,если не разработчик , то понимающий что откуда берётся ...
Повторюсь , вы абсолютно правы....
Спорить бессмысленно .
Мы говорим об одном и том же с разных позиций :
вы со стороны , что это не правильно и не возможно...
я согласен - не правильно, но при этом вполне возможно, допуская , что не во всех субд

Вот вам маленький примерчик в картинках: access , две таблички с ключами и с наличием записей.
Пока значения в ключевых полях по которым происходит Fk совпадают ,связь строится на раз.
Как только в дочерней таблицы в ключевое поле внести значение , которого нет в головной таблице -
вылетает ошибка, как и должно.
Т.е. мы видим , что проверка на целостность происходит внутренними механизмами субд , независимо
от того , есть в таблице данные или нет. При этом ничто нам не мешает поубивать/восстановить
все ключи/изменять данные в несвязанных таблицах...и т.д. , но это уже детали
1
Миниатюры
Упорядочить номера индексированного поля в таблице БД   Упорядочить номера индексированного поля в таблице БД   Упорядочить номера индексированного поля в таблице БД  

Упорядочить номера индексированного поля в таблице БД   Упорядочить номера индексированного поля в таблице БД  
XIST
1070 / 795 / 112
Регистрация: 01.10.2009
Сообщений: 2,446
Записей в блоге: 1
15.09.2016, 19:40 15
Kulma, лад согласен)
1
15.09.2016, 19:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2016, 19:40

Обновление одного поля таблицы, при заполнении поля в другой таблице
Друзья помогите новичку! Есть две таблицы -продажа(id продажи, сумма продажи)...

Сравнение всех значений поля в одной таблице со значением одного поля в другой
Пожалуйста помогите! БД в Access. Две таблицы id и ip. Поле pn таблицы id...

Заполнение базы данных с определенного номера поля ключевого поля
Добрый день, написан код для заполнения таблицы на c#, но при запуске выдает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru