一次更新两个表Postgresql

时间:2017-10-01 12:11:17

标签: postgresql

以下是我的数据库的简化版本:

+-----------+
|   USER    |           +-------------------+
+-----------+           |       EMAIL       |
|user_id    |           +-------------------+
|email_id FK+-+--------<+email_id           | 
|email_name |           |email_domain UNIQUE|
+-----------+           +-------------------+

如您所见,我已将电子邮件规范化,以便将电子邮件域名和电子邮件名称分开 (例如,如果email = foo@example.com则email_name = foo; email_domain = example.com)

但这引入了我自己无法解决的问题。当插入USER时,我想检查email_domain是否存在以及是否存在,然后获取该email_id并将其作为email_id插入USER,否则我想创建新的EMAIL,获取新创建的电子邮件ID并插入用户作为email_id。
在处理一次插入多个表时是否有一些标准方法?

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是在插入和更新(可能是删除)上使用触发器,该触发器将在电子邮件表中查找并相应地更新用户表。这将确保数据永远不会被破坏并严重更新。

另一种方法是创建存储过程以在用户表中执行插入和更新。

第三种方法是在应用程序代码中执行此操作,该应用程序代码与存储过程非常相似,但不是数据库的一部分,并且不容易被其他应用程序重用。

这些方法中的任何一种都是完全合理的方法,并且有其优点和缺点。