Mysql
 sql >> Base de données >  >> RDS >> Mysql

Stockez plusieurs adresses e-mail dans la base de données pour différents types d'utilisateurs

Soit vous avez une table de courrier électronique qui a une clé étrangère qui est soit un system_id, account_id ou customer_id. Ensuite, vous pouvez avoir un champ spécifiant le type de cette clé étrangère. Une autre stratégie plus compliquée serait d'avoir toujours la table email mais pas de clé étrangère. Une autre table que vous appelleriez email_relation composée de l'email_id et de la clé étrangère. De cette façon, vous pouvez utiliser une seule adresse e-mail pour les trois tables.

Exemple d'utilisation de deux tableaux

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

si vous voulez la table client incluant l'adresse 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

Si vous voulez que tous les e-mails soient envoyés à un système, vous pouvez également

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