首页 > 解决方案 > 进行实体映射时是否可以 DELETE/INSERT 而不是 DIFF/UPDATE?

问题描述

假设我有一个活动,我想让人们参加。

当我创建事件时,我会做...

INSERT INTO event (eventName) VALUES ('some event'); -- eventId = 1

INSERT INTO eventPeopleMapping (eventId, personId) 
VALUES 
    (1, 1), -- Person 1
    (1, 2), -- Person 2
    (1, 3),  -- Person 3
    -- hundreds more...
;

现在,如果我想删除Person 3但添加Person 7怎么办?

DELETE FROM eventPeopleMapping WHERE eventId = 1;

INSERT INTO eventPeopleMapping (eventId, personId) 
VALUES 
    (1, 1), -- Person 1
    (1, 2), -- Person 2
    (1, 7),  -- Person 7
    -- hundreds more...
;

这是一个好方法吗?

注意:这适用于数百人,经常变化。

比较数组和对象以找出差异,然后在数据库中寻找值太麻烦了。这看起来很简单,但我不知道我是否遗漏了什么。

我看到的唯一缺点是大量的映射 ID,并且它们不断变化。

标签: sqldatabaseentity

解决方案


您的方法有效,但它需要了解活动中的所有人。更常见的是,您只删除要删除的行,然后只插入新行:

DELETE FROM eventPeopleMapping
    WHERE eventId = 1 AND personId = 3;

INSERT INTO eventPeopleMapping (eventId, personId) 
    VALUES (1, ;7)  -- Person 7

推荐阅读