Прежде всего, я понимаю, что есть много вопросов относительно этой проблемы, и есть хороший шанс, что я уже знаю один из ответов, но после того, как я попробовал пару они, никто из них не работал для меня.Sql один внешний ключ для разных таблиц
В моем приложении я обрабатываю связь между пользователем и клиентом. У пользователей и клиентов может быть несколько адресов электронной почты. Кроме того, одновременно и пользователям, и клиентам могут быть назначены несколько разговоров. После того, как пользователь или клиент отправит сообщение электронной почты, система получает информацию об этом и создает сообщение об обмене сообщениями с базовой информацией об этом сообщении и электронной почтой с конкретными данными (тема, ОТ, ТО и т. Д.).
Прямо сейчас, поля от и до только VARCHAR поля с адресами электронной почты. Я хотел бы изменить его так, чтобы поля FROM и TO были внешними ключами. Я планировал создать таблицу EmailAddresses, в которой будет храниться основная информация об адресах и таблицах UserEmailAddresses и ContactPersonEmailAddresses с конкретной информацией об адресе (например, хост, порт и т. Д.), Но я понял, что таблица EmailAddresses будет содержать только идентификатор. Это хороший подход? Я что-то упускаю?
Есть ли какие-либо лучшие решения для такого рода проблем?
Благодарим за помощь!
Предположительно, таблица EmailAddresses имела бы адрес электронной почты в дополнение к ID-адресу справа? В этом подходе нет ничего плохого. Но нужен ли вам уровень нормализации?Ожидаете ли вы, что у нескольких пользователей есть тот же адрес электронной почты? Иногда это имеет смысл, но похоже, что это очень вероятно в отношении нормализации. –
Я не уверен, что согласен с Шоном, но потом снова работаю с базами данных, которые используют общие адреса электронной почты, и у них больше 1. Но я бы подумал о таких вещах. Человек - это лицо, а адрес электронной почты - адрес электронной почты. что означает отсутствие необходимости в отдельных таблицах электронной почты для пользователей и лиц. Таким образом, ваш пользователь таблицы ссылок для пользователей уже не должен носить первый и второй раз, он просто даст вам головную боль для синхронизации, вы можете создавать представления/функции, чтобы добраться до него. В дополнение к таблице электронной почты вам тогда понадобится человек, чтобы переслать таблицу перекрестных ссылок – Matt
@SeanLange Спасибо за ответ. В таблице EmailAddresses действительно может быть поле адреса, я забыл об этом. Однако я не вижу проблемы с нормализацией. Один пользователь может иметь несколько адресов электронной почты, но один адрес может быть назначен только одному пользователю (поле [Пользователь] в таблице UserEmailAddresses). –