将json数组存储为数据库中的json字符串

时间:2014-01-19 12:19:40

标签: sql-server json json.net value-objects datapersistance

我有一个名为Schoolyear的业务对象,目前有一个标志枚举:

[Flags]
public enum VisibleDayOfWeek : int
{
    None = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 4,
    Thursday = 8,
    Friday = 16,
    Saturday = 32,
    Sunday = 64
}

对我来说,这是没有标识符的值对象,它们没有获得额外的sql表。这也有点矫枉过正。

现在我考虑将这些可见日(用户可以配置)保存为数据库中的int值。它目前正在工作,但是在数据库中读/写并将这些值读/写到业务对象中并对这些对象进行集成测试是一件痛苦的事。

因为我有一个javascript客户端消耗json数据我今天早上想到为什么不将我从浏览器直接获得的json数组保存为数据库中的json字符串。所以我唯一要做的就是客户端的json.parse。要在服务器端进行集成测试,我使用json库中现有的json.serialize / deserialize方法。

可见天数在一年内仅变化1,2或3次不常见。每个用户每5年有5个schoolyear datarow可能不多。永远不会通过sql select查询可见天数列。 UI逻辑在客户端完成。

所以对我来说,最好将json数组存储为sql数据库中的json字符串。

您如何看待我的新方法?你有没有想到我可以在以后再次忏悔的任何负面副作用??

1 个答案:

答案 0 :(得分:4)

不将JSON放在关系数据库的文本字段中的原因:

  1. 您将无法执行依赖于JSON字段中数据的查询。
  2. 由于您没有向SQL引擎描述数据,因此您的应用程序/服务器代码有责任验证数据并确保数据在数据损坏时能够正常运行。
  3. 将JSON放在关系数据库的文本字段中的原因:

    1. 效率(JOIN可能很慢,如果你知道你永远不需要使用字段中的数据进行查询,则不需要以允许的方式存储它)。
    2. 简化实施(只需确保检查(在服务器上)客户端为您提供了有效的JSON字符串)。