Я разрабатываю базу данных, которая будет основой для сайта торговой площадки.Будут покупатели и продавцы, создающие аккаунты.Я планирую иметь единую форму входа для всех типов учетных записей и центральную таблицу учетных записей, в которой будут храниться данные учетной записи, общие для всех типов учетных записей, где будут храниться учетные данные пользователя, и их можно будет проверять при входе любого пользователя.
Учетные данные пользователя будут состоять из электронной почты и пароля.Столбец электронной почты таблицы будет уникальным, поэтому адрес электронной почты может быть сопоставлен только с одной учетной записью.
Но проблема возникает, когда пользователь хочет удалить свою учетную запись.Пользователь сможет закрыть свою учетную запись, но большая часть данных, относящихся к его учетной записи, будет сохранена в базе данных.Необходимо сохранить данные, так как они будут актуальны для других пользователей и сайта в целом.Например, сообщения, заказы, споры и т. Д. Так как покупатели должны хранить данные, чтобы видеть детали о продавцах в своем прошлом заказе, на самом деле все данные аккаунта должны храниться и просто иметь статус прекращенных.
Итакчто произойдет, если пользователь закрыл свою учетную запись, но попытался создать новую учетную запись с тем же адресом электронной почты?Им не будет разрешено, потому что уже есть учетная запись с этим адресом электронной почты и статусом прекращено.
Моя первая идея состояла в том, чтобы заменить адрес электронной почты на ноль, когда учетная запись прекращается.Таким образом, электронная почта может быть снова использована для новой учетной записи, но затем я понял, что уникальный столбец может иметь только одно значение NULL.
Моя следующая идея состояла в том, чтобы перенести условные счета в другую таблицу и удалить столбец электронной почты.Однако это не имеет смысла, так как многие другие таблицы в базе данных будут иметь внешние ключи, которые ссылаются на исходную таблицу.
Другая идея состоит в том, чтобы иметь три основные таблицы учетных записей.
AccountInventory: AccountID_PK, статус
ActiveAccounts: AccountID_PK, электронная почта, пароль, PasswordSalt, AccType, AccStatus
TerminationAccounts: AccountID_PK, AccType
Таким образом, ямог ссылаться на таблицу AccountInventory с внешними ключами в других моих таблицах.Используйте таблицу ActiveAccounts для проверки учетных данных при входе пользователей. И перемещайте удаленные учетные записи в таблицу TerminationAccounts, сохраняя при этом ссылочную целостность других данных в этой учетной записи, так как внешние ключи ссылаются на AccountInventory.
Это лучший способ для достиженияэта функциональность позволяет пользователям повторно использовать адрес электронной почты при сохранении целостности данных?Мне немного неловко иметь таблицу AccountInventory, которая по существу не содержит ничего, кроме идентификаторов учетных записей, которые все другие таблицы, которым необходимо присоединиться к ActiveAccounts или прекращенным учетным записям, должны будут присоединиться.
Так что это лучшее решениеили есть более разумный способ сделать это?
С уважением, Дункан