#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
были бы соответствующие действия.