Вопрос: Какие еще стратегии избегают магических чисел или жестко заданных значений в сценариях SQL или хранимых процедурах?
Рассмотрим хранимую процедуру, задачей которой является проверка/обновление значения записи на основе ее StatusID
или некоторой другой таблицы поиска FK или диапазона значений.
Рассмотрим таблицу Status
, где идентификатор наиболее важен, поскольку он является FK для другой таблицы:
Сценарии SQL, которые следует избегать, выглядят примерно так:
DECLARE @ACKNOWLEDGED tinyint
SELECT @ACKNOWLEDGED = 3 --hardcoded BAD
UPDATE SomeTable
SET CurrentStatusID = @ACKNOWLEDGED
WHERE ID = @SomeID
Проблема заключается в том, что это не переносимо и явно зависит от жестко заданного значения. Тонкие дефекты возникают при развертывании в другой среде с отключением идентификационных данных.
Также старайтесь избегать SELECT
на основе текстового описания/имени состояния:
UPDATE SomeTable
SET CurrentStatusID = (SELECT ID FROM [Status] WHERE [Name] = 'Acknowledged')
WHERE ID = @SomeID
Вопрос: Какие еще стратегии избегают магических чисел или жестко заданных значений в сценариях SQL или хранимых процедурах?
Некоторые другие мысли о том, как достичь этого:
- добавьте новый столбец
bit
(по имени "IsAcknowledged" ) и наборы правил, где может быть только одна строка со значением1
. Это поможет найти уникальную строку:SELECT ID FROM [Status] WHERE [IsAcknowledged] = 1)