Если проблема заключается только в том, что «участники имеют адреса электронной почты», то я бы сохранял адрес электронной почты, непосредственно связанный с участником, а не нормализовал его в таблице электронных писем. Это потому, что не все «участники» обязательно будут обмениваться электронными письмами.
Если (и не спрашивайте меня почему, я не
понять конечных пользователей) два члена
использовать тот же адрес электронной почты, что и
происходит, когда один из них меняется
их адрес - но другой
не хочет?
Второй случай, что если у меня есть два участника в вашей системе, оба с
тот же адрес электронной почты, а затем я хочу изменить один из них на другой адрес? (Не спрашивайте меня, почему, я конечный пользователь, и я уже сказал, что не понимаю конечных пользователей.)
Это охватило бы довольно простую и понятную ситуацию. Если ваша система отличается от такой, что вам нужно больше или более жесткий контроль над электронными письмами, нормализация может работать для вас. Хитрость заключается в том, чтобы определить, являются ли с точки зрения данных повторяющиеся данные, которые могут быть нормализованы, или «отдельные» данные, которые просто содержат некоторые дублирующие значения.
Таблица электронной почты Bounceback подходит в любом случае, поскольку это отдельный тип данных (или тип адреса электронной почты).
Что касается строк и длины индекса, то в наши дни, если СУБД заявляет, что она может индексировать или однозначно индексировать строку длиной до X символов (сколько времени получают адреса электронной почты?), Вы можете рассчитывать на это. Он может работать не слишком быстро, так как он должен обрабатывать X байтов данных на ключ вместо 4 (типичный целочисленный объем памяти), но он будет работать.