Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2009, 22:06   #1
Evgenii
Форумчанин
 
Аватар для Evgenii
 
Регистрация: 04.01.2008
Сообщений: 201
По умолчанию Размер ключевого поля - ?

В базе данных ключевое поле имеет размер - длинное целое. В процессе добавления записей в таблицу, значение ключевого поля постоянно возрастает. (при удалении записей значение не уменьшается). Возникает такой вопрос-не достигнет ли значение ключевого поля размера, превышающего заданный? И что может произойти если это случится
Evgenii вне форума Ответить с цитированием
Старый 02.07.2009, 22:54   #2
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

вот наткнулся как раз недавно... статья была про IB
"Максимальное количество записей в таблице зависит от среднего размера записи, и не может превышать 2 миллиардов. Размер записи может быть не более 64К, и максимальное количество столбцов зависит от используемых типов полей. Если хранимое значение столбца BLOB меньше размера страницы, то он попадает на страницу данных. Если больше, то хранится на отдельной странице.
Чем больше количество столбцов в таблице и чем больше записей в таблице, тем больший размер страницы базы данных имеет смысл выбирать."
_________________________
следовательно, достигнет и произойдет ошибка
maLoy*508 вне форума Ответить с цитированием
Старый 02.07.2009, 23:07   #3
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

при чем здесь
Цитата:
размер страницы базы данных
?

2Evgenii
а Вы гляньте максимальное значение по этому типу, потом прикиньте с какой скоростью заполняется поле и станет ясно - на сколько лет его хватит
даже если в день писать по 500 000 строк, то хватит на 10 лет
soleil@mmc вне форума Ответить с цитированием
Старый 02.07.2009, 23:36   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
И что может произойти если это случится
плохо будет. при попытке добавить очередное значение случится ошибка..


НО!

я полностью присоединяюсь к словам soleil@mmc!

судя по всему, у Вас MS Access.
Длинное целое (Long Integer) имеет размерность от –2,147,483,648 до 2,147,483,647
считаем, что в день добавляется 500000 (полмиллиона) записей. (на самом деле, поверьте моему опыту, реальные таблицы даже за много-много лет работы редко превышают объём в несколько миллионов записей... разве что какие-то регистраторы в автомате будут снимать характеристики какого-то процесса. да и то, это маловероятно). ну да ладно. пусть будет 500000. (это приблизительно 6 записей в секунду)

тогда делим 2147483647 /500000 получаем 4294 дня переводим в года, получаем 11 лет и 274 дня... Хватит?

Последний раз редактировалось Serge_Bliznykov; 02.07.2009 в 23:38.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.07.2009, 00:01   #5
Evgenii
Форумчанин
 
Аватар для Evgenii
 
Регистрация: 04.01.2008
Сообщений: 201
По умолчанию

насчет размера таблиц я совершенно не беспокоюсь. Записей там будет
не больше тысячи. Дело в другом. Попробую сформулировать свой вопрос точнее.
Записи добавляются и удаляются, а значение ключевого столбца Key становится все больше. К примеру добавили первую запись, значение Key = 1,....после десятой записи Key = 10. Удалили из таблицы все записи начиная с первой и до девятой включительно. Key по прежнему = 10. После добавления записей это значение опять возрастет, т.к. каждой записи присваеваится уникальный номер. Я хочу сказать, что независимо от количества записей в таблице, значение Key неизменно будет возрастать. Так вот, какое предельное число, достигнув которое, произойдет ошибка?
Изображения
Тип файла: jpg таблица.jpg (96.8 Кб, 50 просмотров)
Evgenii вне форума Ответить с цитированием
Старый 03.07.2009, 00:04   #6
Evgenii
Форумчанин
 
Аватар для Evgenii
 
Регистрация: 04.01.2008
Сообщений: 201
По умолчанию

Насколько я понял, значение в столбце Key1 должно достигнуть 2,147,483,647 чтобы возникли проблемы
Evgenii вне форума Ответить с цитированием
Старый 03.07.2009, 00:13   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от Evgenii Посмотреть сообщение
Насколько я понял, значение в столбце Key1 должно достигнуть 2,147,483,647 чтобы возникли проблемы
именно так
если хочется узнать на практике что будет если, то предлагаю написать небольшую процедурку, с помощью которой накрутить сиквенс (или просто выставить генератор - смотря какая СУБД) до значений чуть меньше максимально допустимого и попробовать вставить еще несколько записей
soleil@mmc вне форума Ответить с цитированием
Старый 03.07.2009, 00:24   #8
Evgenii
Форумчанин
 
Аватар для Evgenii
 
Регистрация: 04.01.2008
Сообщений: 201
По умолчанию

Большое спасибо. Мне достаточно было знать что по достижении определенного числа, через несколько десятилетий произойдет ошибка, А какая это уже неважно, особенно через такой срок, когда и база то уже не будет использоваться наверное)
Evgenii вне форума Ответить с цитированием
Старый 03.07.2009, 00:26   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Насколько я понял, значение в столбце Key1 должно достигнуть 2,147,483,647 чтобы возникли проблемы
точно так. И, вышеприведённые расчёты показывают, что Вы много-много лет можете удалять и вставлять записи, не заботясь о возникших дырах и переполнении первичного ключа.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.07.2009, 01:07   #10
Evgenii
Форумчанин
 
Аватар для Evgenii
 
Регистрация: 04.01.2008
Сообщений: 201
По умолчанию

ет хорошо) еще раз спасибо
Evgenii вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить в InterBase размер поля varchar(10) на varchar(20) tarakan1983 БД в Delphi 4 23.03.2009 15:35
Автозаполнение ключевого поля Avalonix БД в Delphi 6 29.05.2008 12:33
Размер поля БД kayman Общие вопросы Delphi 1 14.10.2007 21:43
Как изменить размер поля БД Алёна БД в Delphi 5 07.05.2007 10:06