Можно ли УДАЛЯТЬ / ВСТАВЛЯТЬ вместо DIFF / UPDATE при сопоставлении объектов?

#sql #database #entity

#sql #База данных #сущность

Вопрос:

Допустим, у меня есть событие, и я хочу, чтобы на нем присутствовали люди.

Когда я создаю событие, я бы сделал…

 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...
;
  

Это хороший способ сделать это?

ПРИМЕЧАНИЕ: это для сотен людей, часто меняется.

Сравнение массивов и объектов для поиска различий, а затем поиск значений в базе данных слишком громоздок. Это кажется таким простым, но я не знаю, не упускаю ли я чего-то.

Единственный недостаток, который я вижу, — это ТОННА идентификаторов сопоставления, и они постоянно меняются.

Ответ №1:

Ваш метод работает, но для этого требуется знать всех людей на мероприятии. Чаще всего вы удаляете только строку, которую хотите удалить, а затем вставляете только новую строку:

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

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

Комментарии:

1. Если он всегда удаляет одно и добавляет другое, почему бы нам просто не update выполнять одно действие вместо delete и insert как два действия? или я ошибаюсь?

2. Да, я знаю всех людей, которые постоянно посещают. Кроме того, этот вариант использования для сотен людей постоянно меняется. Итак, мне было интересно, плох ли мой подход, если есть 100 человек, и если я добавлю одного, 100 будут удалены, 101 будут вставлены после. Это намного проще, чем выяснять, что удалять и что вставлять, но я не уверен в стоимости.

3. @Sujitmohanty30 . . . В OP конкретно указано удалить одного человека и добавить другого, а не менять одного человека на другого.

4. @GordonLinoff Да, и не обязательно один человек. Может быть удалено 100 и добавлено 200. Ваш ответ остается в силе?

5. @Ivan . . . Честно говоря, я не понимаю, почему вы используете базу данных, если у вас есть полные списки где-то еще. База данных действительно должна отслеживать эту информацию, и insert / delete были бы соответствующие действия.