Моя цель - иметь таблицу с именем emails
и таблицу с именем accounts
с двумя отдельными отношениями между ними.
- Отношение один-ко-многим от
accounts
доemails
, чтобы каждая учетная запись могла быть связана с некоторым количеством электронных писем. - Отношение "один к одному", чтобы каждая учетная запись была связана только с одним электронным письмом.
ЭтоПозволит моим пользователям добавлять несколько адресов электронной почты в свои учетные записи, но при этом установить, что одно из этих писем будет установлено в качестве «основного».
Попытка 1
Первое, что я попробовал, было следующее:
emails accounts
--- ---
id id
account email
email
Для этой работы необходимы два внешних ключа:
emails ( account ) REFERENCES accounts ( id ) ON DELETE CASCADE
accounts ( id, email ) REFERENCES emails ( account, id )
Однако, поскольку MySQL не откладывает проверки внешнего ключа, это нене работает.
Попытка 2
Я пытался избежать таблиц, ссылающихся друг на друга, так как это портит внешние ключи в MySQL.Второе, что я попробовал, было следующее:
emails accounts
--- ---
id id
account
email
default
Для этого необходим только один внешний ключ:
emails ( account ) REFERENCES accounts ( id )
Но также этот индекс:
UNIQUE KEY emails ( account, default )
К сожалению, на самом деле это не отношение «один к одному», а отношение «один к нулю или один»: оно позволяет связывать учетные записи , а не с основным адресом электронной почты.
Попытка 3 ??
Как еще можно решить эту проблему?Я не очень знаком с триггерами ... это было бы подходящим решением здесь?Я никогда не использовал их много.Я всегда думал, что спусковые механизмы были грязными.Но я отвлекся.Я здесь спрашиваю мнение сообщества, потому что у меня нет идей, поэтому, возможно, мне нужно изменить свою мелодию на триггерах.
Спасибо всем заранее!