0
我有兩個表product
和tag
與聯結表products_tags
。一個產品可以有多個不同的標籤,一個標籤可以有很多不同的產品,但是一個產品和一個標籤之間的關係需要是唯一的。更新交界表
CREATE TABLE product (
id serial PRIMARY KEY NOT NULL,
name varchar(255) NOT NULL
)
CREATE TABLE tag (
id serial PRIMARY KEY NOT NULL,
name varchar(255) NOT NULL
)
CREATE TABLE products_tags (
product_id integer NOT NULL REFERENCES product(id),
tag_id integer NOT NULL REFERENCES tag(id),
PRIMARY KEY(product_id, tag_id)
)
目前,我計劃在每次由前端層更新時間發送tags
陣列Product對象更新聯接表,刪除products_tags
包含當前product_id
所有行,並創建一個新的行對於tags
陣列中的每個ID,在products_tags
中。
我的問題是:是否有更高效的方法來實現這一目標?或者是刪除並重新插入行是確保聯結表中數據完整性的唯一方法?
這會導致創建太多的行版本,即使這些更改很少(可能會損失2 * N個受影響的行!)。更好地插入不在數據庫表中的內容+刪除不在新列表中的內容; – wildplasser
你是對的@wildplasser我想我會創建一個postgres函數來處理這個問題,在應用程序層中這樣做會感覺它會導致太多的往返數據庫,並可能會變得混亂。 – Toni
這裏不需要函數。您可以使用鏈式CTE來組合這兩個操作。也許把它放在一個準備好的聲明中。 – wildplasser