sql - 进行实体映射时是否可以 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,并且它们不断变化。
解决方案
您的方法有效,但它需要了解活动中的所有人。更常见的是,您只删除要删除的行,然后只插入新行:
DELETE FROM eventPeopleMapping
WHERE eventId = 1 AND personId = 3;
INSERT INTO eventPeopleMapping (eventId, personId)
VALUES (1, ;7) -- Person 7
推荐阅读
- python - 如何使第二个画布窗口可滚动?
- wordpress - 如何将带有 www 的子域重定向到主域?
- dependency-injection - .Net 核心 DI 范围验证,范围与瞬态?
- magento2 - 将附加数据添加到块(magento 2)
- java - 如何在 Delphi 代码中捕获 java 异常
- python - 如何将自动计数器添加到模型对象?
- android - 这种布局叫什么?
- django - 在哪里托管 wagtail/django
- java - Spring Boot 找不到 EmbeddedKafkaBroker Bean
- regex - 正则表达式按日期过滤我的日志