Возможность сбрасывать идентификаторы (primary keys) при сдаче проекта

Рейтинг: 2.1462  
На голосовании
Предложил Баринов Кристиан 06.11.2014 16:55:45

Возможность сбрасывать идентификаторы (primary keys) при сдаче проекта

При сдаче проекта имеем много тестовых данных, которые подчищаем: пользователи, заказы, эл-ты инфоблоков. После подчистки, ID сущностей, разумеется, не сбрасываются, а продолжаются. Один раз клиент спросил меня о возможности сброса номеров заказа. Может заведем кнопку "Обнулить счетчики"? С подтверждением действия. В MySQL такая возможность есть:
ALT ER   TABLE имя_таблицы AUTO_INCREMENT = 1;  
/*правда ни разу не выполнял на таблицах Битрикса, да и вообще */


Разумеется, нужно чтобы человек понимал что делал. Как вариант - сделать эту кнопку в тех местах, где она будет востребована (например в самих заказах). Насколько подсказывает логика, кнопка может быть активной только тогда, когда в соответствующей таблице в БД нет строк (удалены все заказы, эл-ты инфоблоков и т.д.)

Конечно, тут разработчикам нужно внимательно проследить, не будет ли нарушения целостности данных.

UPD: сейчас выполнил запрос на сброс первичного ключа при заполненной таблице b_iblock_element. Добавил новый элемент в инфоблок через админку. Новый ID продолжился.

Удалил все строки из таблицы и еще раз выполнил предложенный выше запрос на сброс первичного ключа. Добавил эл-т в инфоблок через админку. ID эл-та присвоилось значение "1". Следующему - "2". Что и хотелось видеть. Как и думал, сброс первичного ключа работает при очищенных записях в таблице.

Рейтинг: 1.4473  
Бугай Максим 09.11.2014 10:20:58
ИМХО, это чревато огромными проблемами с целостностью проекта. То, что после такого сброса ничего нигде не отвалится и не законфликтует - исключительно под честное слово разработчика, что он вся лично проверил и не оставил нигде зависимостей. Это всё равно как дать ящик динамита с удобной красивой кнопочкой "взорвать"...
Если кому-то очень сильно надо, уж лучше вручную, как минимум будет гарантия, что человек хорошо осознаёт, что именно он делает.
Рейтинг: 0  
Баринов Кристиан 13.11.2014 12:03:28
Максим, я думаю, проблема может возникнуть только в том случае, если на таблицы, где мы сбрасываем ID, будут повешены и использованы вторичные ключи, либо просто где-то использоваться идентификаторы. Но ведь я указал, что перед тем, как выполнять сброс айдишников, инфоблок должен быть чистым. Это обязательное условие возможности сброса айдишников

Если мы удаляем все записи из инфоблока, то Битрикс сам заботится о целостности данных - он просто сбрасывает в NULL все привязки к этим элементам очищаемого инфоблока. Ну а если эти ID используются в пользовательской таблице MySQL или еще где-то, то разработчик сам должен контролировать ситуацию в том случае, если записи из родительской сущности будут удалены.

Так что, строго говоря, проблему не вижу. Думаю, решаемая задача.
Рейтинг: 0  
Диденко Денис 14.11.2014 17:44:54
Категорически против, рано или поздно на такую кнопку ткнет клиент, и после этого вы получите тучу duplicate key... А то что клиент в нее ткнет сомневаться не приходится.
Рейтинг: 0.246  
Семочкин Михаил 08.01.2015 17:50:51
На всякий случай напомню про фичу InnoDB (который используется по умолчанию в нынешних версиях MySQL). Если таблица пуста, то при старте MySQL автоинкремент будет начинаться с единицы. Даже если раньше в эту таблицу что-то вставляли и потом удалили.
А если не удалили, то и руками менять автоинкремент нельзя.
Рейтинг: 0  
Баринов Кристиан 08.01.2015 20:37:06
Ребята, спасибо всем за отзывы. Продолжаем голосовать "за" и "против". Если честно, в каждый коммент не вдумываюсь, но мнение каждого очень интересно.