Моя самая большая проблема, которую вы предлагаете, заключается в том, что вы будете ограничены 360 первичными записями. Это похоже на небольшое число.
Выполнение изменения является многошаговой операцией. Вам необходимо создать новое поле в основной таблице и во всех связанных с ней таблицах.
Чтобы выполнить обновление на месте, вам необходимо сгенерировать код в основной таблице. Затем вам нужно обновить все связанные таблицы, чтобы иметь код, основанный на old id. Затем вам нужно добавить ограничение внешнего ключа для всех связанных таблиц. Затем вам нужно удалить поле старого ключа из всех связанных таблиц.
Мы сделали это только на нашем сервере разработки. Когда мы обновили действующие базы данных, мы создали новую базу данных для каждой и скопировали данные с помощью сценария Python, который запрашивал старую базу данных и вставлял ее в новую базу данных. Теперь я обновляю этот скрипт для каждого обновления программного обеспечения, чтобы ядро ядра оставалось неизменным, но я могу указать разные таблицы или модификации данных. Я получаю бонус за полную резервную копию исходной базы данных, если при обновлении производства происходит что-то непредвиденное.
Один веский аргумент в пользу неидентификационного / guid-кода заключается в том, что вам нужен читабельный / запоминающийся код, а также возможность перемещать записи между двумя системами.
Производительность не обязательно является проблемой в SQL Server 2005 и 2008. Недавно мы претерпели изменения, в которых мы перешли от идентификаторов везде к 7 или 8 символьным «дружественным» кодам записей. Мы ожидали увидеть какое-то снижение производительности, но на самом деле мы увидели улучшение улучшение .
Мы также обнаружили, что нам нужен способ быстрой генерации кода. Наши коды состоят из двух частей: альфа-префикс из 3 символов и суффикс из 4 или 5 цифр Как только у нас появилось большое количество кодов (15000-20000), мы обнаружили, что он замедляет анализ кода в префикс и суффикс и находит наименьший неиспользуемый код (это заняло несколько секунд). По этой причине мы также храним префикс и суффикс отдельно (в таблице первичных ключей), чтобы мы могли быстро найти следующий доступный младший код с конкретным префиксом. Кэшированный префикс и суффикс сделали поиск почти платным.
Мы разрешаем изменение кодов, и их измененные значения распространяются по правилам каскадного обновления на отношение внешнего ключа. Мы сохраняем идентификационный ключ в таблице кодов ядра, чтобы упростить обновление кода.
Мы не используем ORM, поэтому я не знаю, что конкретно нужно знать об этом. У нас также есть порядка 60 000 первичных ключей в нашем самом большом экземпляре, но у нас есть сотни связанных таблиц и таблицы с миллионами связанных значений для кодовой таблицы.
Одним из больших преимуществ, которое мы получили, было то, что во многих случаях нам не нужно было объединяться для выполнения операций. Везде в программном обеспечении пользователь ссылается на вещи с помощью дружественного кода. Нам не нужно искать int ID (или объединение) для выполнения определенных операций.