В настоящее время у меня есть настройка таблицы базы данных (EAV - деловые причины действительны):
- Id - int (PK)
- Ключ - уникальный, varchar (15)
- Значение - varchar (1000)
Это позволяет мне добавлять смешанные значения в мою базу данных как пары ключ/значение. Например:
1 | 'Some Text' | 'Hello World'
2 | 'Some Number' | '123456'
etc.
В моем коде С# я использую ADO.Net с помощью reader.GetString(2);
для извлечения значения в виде строки, а затем, если нужно, мой код в другом месте преобразует его, например... Int32.ParseInt(myObj.Value);
. Я смотрю на увеличение моей таблицы, возможно, изменив столбец значений на тип данных sql_variant
, но я не знаю, какая польза от этого будет? В принципе, есть ли преимущество в том, что столбец value имеет значение sql_variant
vs varchar(1000)
?
Чтобы быть более ясным, я где-то читал, что sql_variant возвращается как nvarchar (4000) обратно клиенту, вызывающему вызов (ouch)! Но, не мог ли я применить его к типу, прежде чем возвращать его? Очевидно, мой код нужно будет скорректировать, чтобы сохранить значение как объект вместо строкового значения. Я думаю, каковы преимущества/недостатки использования sql_variant
по сравнению с другим типом в моей текущей ситуации? О, и стоит упомянуть, что все, что я планирую хранить, - это даты, строки и числовые типы (int, decimal и т.д.) В столбце value; Я не планирую хранить и капли, изображения и т.д.