我有一个用Java 17写的项目。我们使用spring-boot和数据库PostgreSQL。我们有一个名为“设置”的表,其中包含以下列:Id BIGINT,KEY String,VALUE String,uuid UUID
在此表中,我们保存项目的通用配置。例如:
KEY=workingDir,VALUE=“C:\workingDir”KEY=encoding,VALUE=“UTF8”ecc.
但是现在我们需要保存一个KEY,其值是一个JSON。示例:
KEY=pattern,VALUE= {range:10-50,valid:2,notvalid:0}
最好的方法是什么?保存JSON为字符串?其他想法?提前感谢
一条建议或一个想法
1条答案
按热度按时间3gtaxfhh1#
以下是三个可能值得考虑的选择:
1.父子树表
一曰:如果名为“设置”的表中的行数非常大(人们在数据库中存储值的原因之一),并且您需要执行查询来查找或排序值,从PostgreSQL v12开始,您可能需要考虑使用jsonb or json PostgreSQL data types,它提供:
这可以是JSON特定字符串的附加列,或者原始基本字符串值可以重新工作或规范化为JSON值(例如
["original value"]
或{"value": "original value"}
),这取决于哪个设置值更常见或您喜欢如何结构和管理表。第二章:hstore module and data type对于在单个PostgreSQL值中存储键/值对集很有用,但与json或jsonb类型相比可能会受到更多限制,部分原因是存储的键/值对的平面性质(无嵌套)。
第三章:虽然不太可能满足您的需求/要求,但另一种替代方案可能是通过使用父+子关系结构增强表来避免完全存储JSON,这将允许您将JSON解构为与祖先条目键或id相关的各个后代条目/行。
其中
{"range":[10, 50],"valid":2,"notvalid":0}
存储为字符串可能是:字符串
相反,父/子结构可以是:
型
或更深的祖先层次:
型
父/子关系也可以通过UUID创建。
这种方法的一些缺点是增加了对JSON进行马歇尔/解编组的复杂性,SQL查找是如何结构化的,或者(通常)增加了SQL查询的复杂性,但如果希望对单个值运行查询,它可能会很有用。