Вопрос дизайна базы данных для всех вас. У меня есть форма (например, вид бумаги), которая имеет несколько точек входа для данных. Эта форма изменилась, и ожидается, что она изменится с годами. Он превращается в компьютерное приложение, чтобы мы могли, помимо прочего, перестать тратить бумагу. (И второстепенные вещи, такие как хранение всех данных в одном центральном хранилище, к которому можно обращаться, и т. Д.) Я хотел бы сохранить все данные форм в базе данных и сделать их довольно независимыми в отношении изменений.
Первоначально я просто рассматривал каждое поле как строку - и у меня была таблица примерно такая:
FormId int (FK)
FieldName nvarchar(64)
FieldValue nvarchar(128)
... что-то в этом роде. На самом деле это было немного больше 3NFy в том, что FieldName было в другой таблице, связанной с искусственным ключом, так что имена полей не были продублированы повсюду.
Однако я бы хотел расширить это на числовые и выпадающие данные. Я мог бы просто хранить числовые данные в виде строк, но это кажется довольно дурацкой идеей. То же самое с выпадающими.
Я мог бы прекратить использование таблицы и фактически использовать столбцы в главной таблице форм (той, на которую ссылается FormId выше), но это означает добавление столбца для каждого нового элемента по мере их появления, и старые формы будут просто нулевыми , (И, если бы я не сохранил его, я бы не знал, когда этот столбец был создан. С таблицей строк выше, это неявно.)
Я мог бы расширить таблицу выше примерно так:
FormId int (FK)
FieldName nvarchar(64)
FieldValueType int -- enum as to which of the columns below are valid (or just let nulls imply that)
FieldValue nvarchar(128)
FieldValueInt int
Комбинации должны быть в OTLT (одна таблица истинного поиска), о которой у меня есть оговорки, но, возможно, это необходимо здесь?
Какой-нибудь совет по StackOverflow? Я использую MSSQL, но это действительно более общий вопрос.