【发布时间】:2014-06-24 08:46:18
【问题描述】:
几个表有一个触发器,它在更新/插入时生成该行的 json 对象表示。例如。 {"email": ..., "relations: N" } //<--an email.json column 并将其存储在 json 列中
relations 只是一个数字绑定(如果有一个词,请告诉我),它允许我将多个姓名、电子邮件、电话、家庭绑定到一个对象中 -
例如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 : ...."}],
}
我遇到的问题是 1) 每次其他表中的一个获取数据 CRUD 时更新 touchRelations.json 会浪费且效率低下,尤其是在一次更新多个表时
2) 我可能无法依赖开发人员在每次查询后调用 update_Relations_json()。
是否有一种简单的方法可以判断一个或多个表是否已更新,并且仅在所有表的所有更新完成后重新生成关系.json?
一种可能的解决方案是创建一个“挂起的更新”表,将信息存储在队列中,并将队列表中的数据一一插入/更新到存储表中,然后调用更新函数,但我是确定这不是最佳选择。
另一种选择是在数据库中创建一个 JSON 解析器,该解析器读取完整的 json 关系(上面的大关系),更新表然后构建 json 对象,但这似乎是对数据库的不良使用。
【问题讨论】:
-
+1 for Good Question.I don't know solution for this, but just for an IDEA, if you know which table was last updated then, you can create trigger for that table only.跨度>
-
可能使用事务进行此类更新,并在
commit transaction运行触发器? -
不知道是不是最好的,但我可能会创建一个包含所有表的名称和某种控件(是否已经更新)的表。
-
这是使用存储过程的地方。创建最终调用您的代码的过程并删除直接更新表的权限 - 从而迫使开发人员始终调用该过程。
-
@Vesper:我认为 MySQL 不支持在提交时触发的触发器。