MySQL с программным удалением, уникальным ключом и ограничениями внешнего ключа

«Named foo» в выходных данных str просто означает, что ваш объект является вектором foo с именами, прикрепленными к нему.

x <- c(1,2,3)
names(x) <- letters[1:3]
str(x)
# Named num [1:3] 1 2 3
# - attr(*, "names")= chr [1:3] "a" "b" "c"

y <- c("bar", "baz")
names(y) <- letters[1:2]
str(y)
# Named chr [1:2] "bar" "baz"
# - attr(*, "names")= chr [1:2] "a" "b"
15
задан Rob Howard 25 August 2010 в 09:36
поделиться

3 ответа

Добавить уникальное ограничение для полей (имя пользователя, удалено) Измените тип поля для «удалено» на INTEGER.

Во время операции удаления (это можно сделать в триггере или в части кода, где вам действительно нужно удалить пользователя) скопируйте значение поля id в удаленное поле.

Этот подход позволяет:

  • сохранять уникальные имена для активных пользователей (удалено = 0)
  • разрешать удаление пользователей с одним и тем же именем пользователя несколько раз

Поле «Удалено» не может иметь только 2 значения, потому что следующее сценарий не будет работать:

  1. вы создаете пользователя "Sam"
  2. Пользователь Sam удален
  3. Вы создаете нового пользователя с именем пользователя "Sam"
  4. Вы пытаетесь удалить пользователя с именем пользователя "Sam" - неудача. У вас уже есть запись userName = 'Sam' и deleted = '1'
27
ответ дан 1 December 2019 в 01:52
поделиться

Мое практическое решение для мягкого - удаляет, архивирует путем составления новой таблицы со следующими столбцами: original_id, table_name, payload, (и дополнительный первичный ключ 'идентификатор).

то, Где original_id исходный идентификатор удаленной записи, table_name, является именем таблицы удаленной записи ("user" в Вашем случае), payload строка JSON-stringified из всех столбцов удаленной записи.

я также предлагаю делать индекс на столбце original_id для последних данных retrievement.

этим способом заархивировать данные. У Вас будут эти преимущества

  • , Отслеживают все данные в истории
  • , Имеют только одно место уже для архивации записей от любой таблицы, независимо от структуры таблицы удаленной записи
  • Никакое беспокойство уникального индекса в исходной таблице
  • Никакое беспокойство проверки внешнего индекса в исходной таблице

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

1
ответ дан 1 December 2019 в 01:52
поделиться

Просто сохраните уникальный индекс или ограничение для имени пользователя . Вы не хотите, чтобы новые пользователи могли использовать удаленное имя, так как не только может возникнуть общая путаница в отношении личности, но и если вы все еще показываете старые сообщения от удаленного пользователя, то они будут ошибочно считаться опубликованными новый пользователь с таким же именем.

Когда новый пользователь регистрируется, вы обычно проверяете, используется ли имя перед завершением регистрации, поэтому здесь не должно быть конфликта.

.

4
ответ дан 1 December 2019 в 01:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: