Как избежать дублирования, если запись уже удалена в таблице MySQL?

#mysql

#mysql

Вопрос:

У меня есть следующая гипотетическая таблица в MySQL.

 Fields : EMP_ID (Primary ky), Employee_name (Unique), Emp_Age, Deleted (bit)
  

Имя_работника определяется как уникальное.
Я не буду физически удалять записи при выполнении delete. Вместо этого я обновлю поле «Удалено» равным 1. (не удалено = 0). Теперь, если я попытаюсь вставить другую запись с тем же именем сотрудника, запись завершится ошибкой, поскольку она уже есть.

Чтобы избежать этой ситуации, я мог бы определить новое «Имя индекса» (Employee_Name и удалено). Но это сработает только один раз. Второе удаление завершится неудачей, поскольку я не могу сейчас изменить поле «Удалено» на 1, поскольку оно уже там.

Есть ли лучший способ справиться с этим случаем?

Я мог бы добавить третье поле типа «Deleted_Date» и добавить его к «Имени индекса» (Employee_Name, Deleted, Deleted_Date), которое будет работать (поскольку «Deleted_Date» не будет дублироваться). Но хороший ли это метод?

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

1. Вы не хотите восстанавливать «удаленную» строку?

2. Не удалено один раз, оно удалено навсегда. При необходимости нужно вставить позже

3. Я думаю, мы можем сделать вывод, что не имеет особого смысла, чтобы имя сотрудника было уникальным.

Ответ №1:

Вы столкнетесь со всевозможными проблемами с уникальным индексом имени сотрудника. В конечном итоге у вас будет 2 активных сотрудника с одинаковым именем. Если вы разрабатываете с учетом этого факта, у вас не возникнет проблемы дублирования в случае удаления.

Кроме того, мне нравится использовать at «status» вместо логического / битового поля. Это дает вам некоторую гибкость, когда у вас есть люди, которые находятся в отпуске или неактивны, или что-то еще.