我有一个名为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个学年数据行,可能不会更多。可见天数列永远不会通过sql select查询。UI逻辑是在客户端完成的。
因此,对我来说,将json数组作为json字符串存储在sql数据库中是个好主意。
你觉得我的新方法怎么样?你看到了我没有想过的任何负面副作用吗?我以后会再次后悔的?
不将JSON放入关系数据库中的文本字段的原因:
- 您将失去根据JSON字段中的数据进行查询的能力
- 由于您没有向SQL引擎描述您的数据,因此您的应用程序/服务器代码有责任验证数据,并确保在数据损坏时它可以正常工作
在关系数据库的文本字段中放入JSON的原因:
- 效率(JOIN可能很慢,如果您知道永远不需要使用字段中的数据进行查询,则不需要以允许的方式进行存储)
- 简化实现(只需确保(在服务器上)检查客户端是否为您提供了有效的JSON字符串)