刪除子記錄在兩個表中考慮保存在數據庫中的經典銷售訂單:更新/插入/數據庫
SALE_ORDER SALE_ORDER_ITEM
---------- ---------------
id integer ...
... order_id integer references sale_order (id)
item_id integer references item (id)
quantity integer
...
對於這個問題的目的,忽略ITEM_ID參照另一個表 - 這是無關緊要的。
我有一個包含一個訂單一類,像這樣:
public class SaleOrder {
private int orderId;
...
private List<BoughtItem> items;
....
}
一個訂單可以改變(我的要求),並且變化可以包括列表中的項目:項目添加,刪除或量不同。當我在數據庫中更新此訂單時,要做的最簡單的事情是delete from sale_order_item where order_id=<my_order_id>
,然後插入通過列表的行。然而這對我來說似乎相當低效,特別是考慮到列表可能包含(可能)數百個不同的項目。 (背景:這些是從超市到批發產品供應商的訂單。)
另一種方法是查詢數據庫,然後將列表與光標進行比較,在必要時添加,刪除或更新 - 這看起來至少是效率低下。
- 是否有另一種(第三?)方法更有效?
- 如果不是,兩者哪一個更好?我總是第一個(全部刪除,然後重新插入,但現在開始懷疑自己
更新:數據庫sqlite3的(在Android上,如果該事項)
是否使用的是RDBMS基於recordState值適當的行動? – Quassnoi
@Quassnoi oops,忘記包含該信息。它是android上的sqlite。 –
我很想知道downvote的用途。 –