Я использую интеграцию SQL CLR с идеей, что мы храним данные с общими типами, такими как (char, int), но затем контекстуализируем данные с ограничениями, в частности, с проверочными ограничениями.
Создайте тип данных в проекте базы данных Visual Studio (C #), который внутренне сохраняет значение как примитивный тип (например, int, float, string и т. Д.), Но ограничивает значения, с которыми он может быть создан. Например, если у вас был тип Score, конструктор выдаст ошибку, если значение выходит за пределы диапазона от 0 до 100, гарантируя, что могут существовать только допустимые объекты Score.
Ваше проверочное ограничение в таблице базы данных будет просто включать вызов функции CLR (которую вы также создадите в своем проекте базы данных), которая просто пытается создать экземпляр вашего типа данных C # с новым значением столбца, которое вы передаете ему. , Функция завершается успешно, если значение построено, и завершается ошибкой, если конструктор выдает ошибку.
Затем у вас есть ограниченный тип данных, централизованный в вашем коде C #, который можно использовать во всем приложении, что также обеспечивает принудительное использование значений в базе данных.