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