我目前有一个数据库表设置如下(EAV - 商业原因是有效的):
- Id - 整数 (PK)
- 键 - 唯一,varchar(15)
- 值 - varchar(1000)
这允许我将混合值作为键/值对添加到我的数据库中。例如:
1 | 'Some Text' | 'Hello World'
2 | 'Some Number' | '123456'
etc.
在我的 C# 代码中,我使用 ADO.Netreader.GetString(2);
将值作为字符串检索,然后让我的代码在其他地方根据需要对其进行转换,例如Int32.ParseInt(myObj.Value);
...。我正在考虑通过可能将值列更改为sql_variant
数据类型来增强我的表,但我不知道这样做有什么好处?基本上,让我的价值列是sql_variant
vs有什么好处varchar(1000)
吗?
更清楚地说,我在某处读到 sql_variant 以 nvarchar(4000) 的形式返回给进行调用的客户端(哎哟)!但是,我不能在返回之前将其转换为它的类型吗?显然,我的代码必须进行调整以将值存储为对象而不是字符串值。sql_variant
我想,在我目前的情况下,使用与其他类型相比有哪些优点/缺点?哦,值得一提的是,我计划在 value 列中存储的只是日期时间、字符串和数值类型(int、decimal 等);我不打算存储和 blob 或图像等。