Tiene una tabla de correo electrónico que tiene una clave externa que es system_id, account_id o customer_id. Luego puede tener un campo que especifique el tipo de esa clave externa. Otra estrategia más complicada sería tener todavía la tabla de correo electrónico pero sin clave externa. Otra tabla a la que llamaría email_relation que consiste en email_id y la clave externa. De esa forma, podría usar una dirección de correo electrónico para las tres tablas.
Ejemplo de uso de dos tablas
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 desea la tabla de clientes, incluida la dirección de correo electrónico
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 desea enviar todo el correo electrónico a un sistema, también puede
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