Звучит как плохой дизайн. Я не думаю, что в этом есть фундаментальное зло, в конце концов, вы можете иметь несколько уникальных индексов для таблицы.
Я могу видеть, где идентификатор был суррогатом IDENTITY
, вы не могли рассчитывать на определенное существующее значение, поэтому вместо него используется естественный ключ, но, как вы сказали, нет гарантии, что оно существует, поэтому ваша логика зависит на нем может сломаться.
Однако в этом случае могут работать другие конструкции, например таблица IsBeer, содержащая все идентификаторы «Beers», или таблица Flags, в которой есть столбец IsBeer (и столбец IsFood) или что-то подобное , Опять же, вы вообще не можете зависеть от их существования, но вам, по крайней мере, не придется беспокоиться об изменении столбца, нарушающем логику, поскольку у вас будет отношение FK.
Для дальнейшего рассмотрения примера Welbog, вы бы предпочли структурно включить информацию из логики вашего приложения в базу данных, например:
SELECT ColumnA, ColumnB
FROM Table T
INNER JOIN Keys K
ON T.KeyId = K.KeyId
WHERE K.IsBeer = 1