Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Armazene vários endereços de e-mail no banco de dados para diferentes tipos de usuários


Você tem uma tabela de e-mail que tem uma chave estrangeira que é system_id, account_id ou customer_id. Então você pode ter um campo especificando o tipo dessa chave estrangeira. Outra estratégia mais complicada seria ter ainda a tabela de e-mail, mas nenhuma chave estrangeira. Outra tabela que você chamaria de email_relation consistindo no email_id e na chave estrangeira. Dessa forma, você pode usar um endereço de e-mail para todas as três tabelas.

Exemplo de uso de duas tabelas
system
--------
s1 
s2
s3

account
--------
a1
a2
a3

customer
--------
c1
c2
c3

email
------
e1 [email protected]
e2 [email protected]
e3 [email protected]
e4 [email protected]

email_relation
---------------
email_id     foreign_id      relation_type
e1           s1              system
e1           a1              account
e1           c1              customer
e2           c1              customer
e3           c2              customer
e4           a3              account
e4           c3              customer

se você quiser a tabela do cliente incluindo o endereço de e-mail
select c.customer_id, e.email
from customer c
left join email_relation r on (r.foreign_id = c.customer_id and relation_type = 'customer')
left join email          e on (e.email_id    = r.email_id)
where r.email_id is not null

Se você quiser todos os e-mails para um sistema, você também pode
select e.email
  from email e
  join email_relation r on (r.email_id = e.email_id and relation_type = "system")
 where r.foreign_id = 1