Я бы, вероятно, выбрал вариант № 4, но использовал вычисляемый столбец для 3-го столбца, чтобы избежать проблемы синхронизации / DRY (а также означает, что вы фактически сохраняете только 2 столбца, избегая проблемы «трех полей»). *
На сервере SQL вычисляемый столбец определяется следующим образом:
CREATE TABLE dbo.Whatever(
Numerator INT NOT NULL,
Denominator INT NOT NULL,
Value AS (Numerator / Denominator) PERSISTED
)
(обратите внимание, что вам может потребоваться выполнить какое-то преобразование типов и убедиться, что знаменатель не равен нулю и т. Д.).
Кроме того, в SQL 2005 добавлен вычисляемый столбец PERSISTED, который избавляет от вычислений во время запроса.