将JSON存储在msSQL数据库中?

时间:2010-03-23 04:59:52

标签: json sql forms

我正在开发一个表单生成器,并想知道将JSON存储在SQL数据库中是不是很糟糕?

我想保留我的数据库&表格简单,所以我打算

`pKey, formTitle, formJSON`

在表格上,然后存储

{["firstName":{"required":"true","type":"text"},"lastName":{"required":"true","type":"text"}}

in formJSON。

赞赏任何意见。

7 个答案:

答案 0 :(得分:30)

我在我的CMS(主持大约110个站点)中广泛使用JSON,我发现访问数据的速度非常快。我感到惊讶的是没有更多的速度降级。 CMS中的每个对象(页面,布局,列表,主题等)都有一个名为JSONConfiguration的NVARCHAR(MAX)列。我的ORM工具知道要查找该列并在需要时将其重新构建为对象。或者,根据具体情况,我将把它传递给客户端,以便jQuery或Ext JS进行处理。

至于我的代码的可读性/可维护性,你可能会说它得到了改进,因为我现在有了代表DB中存储的许多JSON对象的类。

我使用JSON.net进行所有序列化/反序列化。 https://www.newtonsoft.com/json

我还使用单个查询来返回包含实际数据的meta-JSON。与Ext JS的情况一样,我有查询返回Ext JS对象的结构以及对象将需要的数据。这减少了一个回发/ SQL往返。

我还惊讶于代码解析JSON对象列表的速度有多快,并将它们映射到DataTable对象,然后我将其传递给GridView。

我看到使用JSON的唯一缺点是索引。如果您有需要搜索的JSON属性,则必须将其存储为单独的列。

有JSON DB可以更好地满足您的需求:CouchDB,MongoDB和Cassandra。

答案 1 :(得分:7)

从sql server创建对象数据库的绝佳方法。我为所有配置对象以及其他不需要任何特定查询的内容执行此操作。扩展您的对象 - 简单,只需在您的类中创建一个新属性,并使用默认值创建init。不再需要房产吗?只需在课堂上删除即可。易于推出,易于升级。不适合所有对象,但如果你提取任何需要索引的道具 - 继续使用它。非常现代的使用sql server的方式。

答案 2 :(得分:3)

它比在代码中定义的表单要慢,但是一个额外的查询不会对你造成太大的伤害。 (只是不要让1个额外的查询成为10个额外的查询!)

编辑:如果您按formTitle而不是pKey选择行(我会,因为那时您的代码会更具可读性),请在formTitle

答案 3 :(得分:3)

我们使用XML的修改版本完全是您描述七八年的目的而且效果很好。我们客户的形式需求非常多样化,我们无法跟上表/列方法。我们在XML的道路上走得太远,很容易改变,但我认为JSON可以运行得更好,也许更好。

报告对于一些好的解析功能来说没有问题,我会藐视任何人在我们的报告/分析和表/列解决方案之间找到性能上的显着差异。

答案 4 :(得分:2)

你应该可以使用SisoDb。 http://sisodb.com

答案 5 :(得分:1)

我不推荐它。

如果您希望将来根据这些值进行任何报告或查询,那么这将比使用一些额外的表/列更加困难。

你为什么要避免制作新桌子?我说如果你的应用程序要求他们继续并添加它们...如果有人必须通过你的代码/ db稍后它可能会更难以弄清楚你发生了什么(取决于什么类型的你有的文件。)

答案 6 :(得分:1)

我认为将对象数据存储在SQL中的字符串中并不是一个最佳选择。您必须在SQL之外进行转换才能解析它。这会带来性能问题,您将失去使用SQL本机数据解析功能的优势。更好的方法是将JSON存储为SQL中的XML数据类型。通过这种方式,您可以一举两得:您不必创建表的shit加载,并且仍然可以获得SQL的所有本机查询优势。

XML in SQL Server 2005? Better than JSON in Varchar?