将值存储在单独的C#类型特定列中,还是存储在一列中?

时间:2015-11-13 01:07:27

标签: c# sql-server

我正在构建一个C#项目配置系统,它将配置值存储在SQL Server数据库中。

我原本打算将表格设置为:

KeyId        int
FieldName    varchar
DataType     varchar
StringValue  varchar
IntValue     int
DecimalValue decimal
...

将使用DataType列中的值来确定值,以确定要使用哪个Value列,但我真的不喜欢该设计。所以我以为我会走这条路:

KeyId        int
FieldName    varchar
DataType     varchar
Value        varbinary

这里DataType中的值仍然会确定返回的Value的类型,但它将全部在一列中,我不必编写大量的重载来容纳不同的类型,就像我之前的那样解。我只是将Value in作为一个字节数组,并使用DataType来执行获取我的Value所需的任何转换。

varbinary方法是否会导致任何性能问题,或者将所有这些不同类型的数据放入varbinary中只是不好的做法?我一直在寻找大约一个小时,我无法得到明确的答案。

此外,如果有一个更优选的方法,任何人都可以想到得出相同的结论,我都是耳朵(或眼睛)。

2 个答案:

答案 0 :(得分:2)

您可以将设置序列化为JSON,并将其存储为字符串。然后,您可以在一行中进行所有设置,并且您的客户端可以根据需要进行反序列化。这也是一种在不对数据库进行任何修改的情况下随时添加其他设置的安全方法。

答案 1 :(得分:1)

我们正在使用第二种解决方案,效果很好。请记住,磁盘访问的数量级比前者大几个数量级。铸造操作(它的毫秒与纳秒,见ref),所以不要在这里寻找瓶颈。 解决方案可以是实现多态关联(12)。但我不认为有必要,或者你应该这样做。第二个解决方案是接近非Sql db - 你可以作为一个值转储任何东西,也可能是一个页面的整个html标记。应该是呼叫者负责任地知道如何处理数据。

另外,请参阅有关如何在数据库中存储设置的主题:123以进行评论。