Уже было много хороших ответов на этот вопрос, которые в значительной степени сводятся к «Зависит от обстоятельств», и я не могу ничего добавить к ним.
Одна вещь, которая не была упомянута, однако, я думаю, должна быть упомянута, это то, что вы никогда не должны повторно использовать первичные ключи, которые были сгенерированы последовательностью или системой AUTO_INCREMENT.
Когда вы удаляете элемент, которому такая система присвоила первичный ключ, в столбце первичного ключа будут пропуски, оставленные удаленными данными. Существует большой соблазн переназначить эти пробелы новым элементам по мере их добавления или, что еще хуже, перетасовать существующие данные, чтобы дать им новый идентификатор для устранения пробелов, но это приведет к проблемам, которые вы никогда не придется иметь дело, если вы просто оставили ключи в покое.
Скажем, у вас есть база данных принтеров для управления переупорядочением расходных материалов. Принтер 13, старый лазерный принтер, выходит из строя и не подлежит экономическому ремонту, поэтому вы его выбрасываете. Между тем, по несвязанной причине, кто-то заказывает новый термопринтер для печати штрих-кода на складе, и этот принтер прибывает до замены принтера 13. Администратор регистрирует этот новый принтер в базе данных, и, поскольку 13 теперь свободен и вы перерабатываете идентификаторы, новый термопринтер получает 13 в качестве идентификатора.
Теперь кто-то говорит вам, что в принтере 13 почти нет чернил. Вы помните, что принтер 13 - это лазерный принтер, поэтому вам не нужно искать его в базе данных, и вы размещаете заказ на картридж с тонером. Только вам на самом деле нужно было заказывать термобумагу, потому что принтер 13 больше не является лазерным принтером. Когда приходит картридж с тонером, вы не можете его использовать, потому что это неправильная заправка чернил для принтера, вы не можете распечатывать больше штрих-кодов и не можете отправлять заказы, ожидающие отправки.
Что еще хуже, что произойдет, если вы удалите принтер 13 и перетасуете все принтеры, которые идут за ним, чтобы заполнить пробел? Принтер 14 (некоторая дряхлая старая точечная матрица) становится принтером 13, принтер 15 становится принтером 14 и так далее.
На всех принтерах есть ярлыки, так что они могут иметь перекрестные ссылки с базой данных, но теперь все ярлыки устарели. Вам придется обойти, найти каждый принтер в бизнесе (который может исчисляться сотнями!) И перемаркировать их. Это вряд ли эффективное использование времени. И это также подверженный ошибкам процесс, и что произойдет, если это просто никогда не будет сделано? Кто-то звонит, чтобы сказать, что принтер 14 вышел из строя и нуждается в срочном ремонте, так что вы посмотрите на него и обнаружите, что принтер 14 - это струйный принтер в приемной. Только потому, что вы перетасовали идентификаторы, на самом деле точечный матричный принтер нуждается в срочном ремонте. Парня, который вызвал проблему, оставляют в покое, в то время как у администратора есть парень технической поддержки, которого она никогда не вызывала, чтобы починить принтер, который не сломался.
Вы должны думать об идентификаторах, назначенных системой автоинкремента, как о постоянных, они неизменны и не могут быть повторно использованы, даже если вещь, на которую ссылается идентификатор, перестает существовать. Некоторые люди утверждают, что им не нужно беспокоиться об исчерпании идентификаторов, но даже с 32-разрядными системами и подписанными идентификаторами все еще доступно около 2 миллиардов идентификаторов. Если вы можете сделать столбец идентификаторов без знака, то это удвоится до 4 миллиардов, и в 64-разрядных системах число доступных идентификаторов буквально больше, чем количество звезд на небе. Вы не собираетесь исчерпать удостоверения личности.