【发布时间】:2019-08-30 22:33:40
【问题描述】:
我的数据库看起来像这样 https://dbfiddle.uk/?rdbms=postgres_10&fiddle=7e0cf7ad1e5bf9f4e0321a2e5ec970f7
所以
- 一个用户可以拥有多本书
- 基本的一对多关系
假设如果用户更新了现有书籍并添加了更多书籍, 我将如何对此进行查询?
我做了一些研究,得出的结论是,cte 或函数都可以帮助我。
我的请求正文 (JSON) 数据 FOR PATCH QUERY 看起来像这样
{
// user data
user_id: 1,
name : 'Ryan',
books : [
{
book_id : 1,
stock : 500
},
{
book_id : 2,
stock : 500
},
{
// this book should be added to the users_books table
name: 'My new book 1',
stock : 500
}
]
}
The postgresql update queries for the above data should look like ->
UPDATE users_books(stock) VALUES(500) WHERE user_id = 1 AND book_id 1;
UPDATE users_books(stock) VALUES(500) WHERE user_id = 1 AND book_id 2;
INSERT INTO users_books(user_id,book_id,stock) VALUES(1,3,500);
所以看看上面的结构,我需要相应地更新 books_users 表。
我目前的理解是将书籍对象作为 jsonb 传递给 postgresql 的函数。然后在相应地更新/添加书籍的同时循环遍历它。我不确定如何知道用户是否已经拥有一本书。
你们如何将此请求正文转换为上述复杂的更新查询? 在函数中执行此操作是否完全是事务性的?
【问题讨论】:
-
所以 users_books.user_id 和 users_books.book_id 是唯一的组合?
-
@madflow 是的。但我确实需要保持一对多的关系
标签: node.js postgresql plpgsql pg