В моей базе данных есть таблица, которая представляет поля данных в пользовательской форме. DataField дает некоторое представление о том, с каким типом управления он должен быть представлен, и какой тип значения он должен принимать. Упрощенно, вы можете сказать, что у меня есть две сущности в этой таблице - Textbox, принимающий любую строку, и Textbox, принимающий только цифры.
Теперь у меня есть различные значения, хранящиеся в отдельной таблице, ссылающейся на определение поля данных. Каков наилучший способ хранения значения данных здесь, когда тип отличается?
Одно из возможных решений состоит в том, чтобы таблица FieldValue содержала одно поле для каждого возможного типа значения. Теперь это, безусловно, будет излишним, но по крайней мере я получу значение, сохраненное в его правильной форме - упрощая запросы позже.
FieldValue
----------
Id
DataFieldId
IntValue
DoubleValue
BoolValue
DataValue
..
Другая возможность - просто хранить все как String и приводить это в запросах. Я использую .Net с NHibernate, и я вижу, что по крайней мере здесь есть Projection.Cast, которое можно использовать, например, для приведения. строка в int в запросе.
В любом случае в этих двух решениях мне нужно знать, какой тип использовать при выполнении запроса, но я узнаю об этом из DataField, так что это не будет проблемой.
Во всяком случае; Я не думаю, что какое-либо из этих решений звучит хорошо. Они? Или есть лучший способ?