几个表有一个触发器,可以在update/insert上生成行的json对象表示.EG {"email": ..., "relations: N" } //<--an email.json column并将其存储在json列中
关系只是一个数字联系在一起(让我知道是否有一个词),它允许我将多个名称,电子邮件,电话,家庭联系在一起 -
例如 the touchRelation.json column
{
"emails": [ {"email": 1@a.com },{"email: 2@a.com"},{"email: N@a.com"}],
"teles" : [ {"tele" : ... },{"tele : ...."},{"tele : ...."}],
"Names" : [ {"Name" : ... },{"Name : ...."},{"Name : ...."}],
"Homes" : [ {"Home" : ... },{"Home : ...."},{"Home : ...."}],
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是:1)更新touchRelations.json是浪费和低效的每一个其他表中的一个获取数据CRUD,特别是如果一次更新几个表
2)我可能无法依赖开发人员在每次查询后调用update_Relations_json().
是否有一种简单的方法可以判断一个或多个表是否已更新,并且只有在所有表的所有更新完成后才重新生成relations.json?
一种可能的解决方案是创建一个"挂起的更新"表,该表将信息存储在队列中,并逐个插入/更新队列表中的数据到存储表,然后调用更新函数,但我确定这不是这是最好的选择.
另一个选择是在db中创建一个JSON解析器,读取完整的json关系(上面的大关系),更新表然后构建json对象,但这似乎是对数据库的不良使用.
我能想到的最佳选择是创建一个默认值为 0 的“更新”元数据列。当我们更新电话、电子邮件、姓名或家庭时,元数据列将更改为 1(表示更新未提交到关系 JSON 列)
接下来创建一个存储过程“request_relations_json()”来检查待处理的提交(“updates”元列中的 1)。如果没有更新,则将当前的relations.json列返回给应用程序。如果有更新,重新生成json然后返回给应用程序。
它很 hackish,但它不会在每次更新时生成 json。我仍然希望有更优雅的解决方案。