sql >> Base de Datos >  >> RDS >> Mysql

Almacene múltiples direcciones de correo electrónico en la base de datos para diferentes tipos de usuarios

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