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