Masz albo tabelę poczty e-mail, która ma klucz obcy, który jest identyfikatorem system_id, account_id lub customer_id. Następnie możesz mieć pole określające typ tego klucza obcego. Inną bardziej skomplikowaną strategią byłoby pozostawienie tabeli wiadomości e-mail, ale bez klucza obcego. Kolejna tabela, którą nazwałbyś email_relation, składająca się z email_id i klucza obcego. W ten sposób możesz użyć jednego adresu e-mail dla wszystkich trzech tabel.
Przykład użycia dwóch tabel
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
jeśli chcesz tabelę klientów zawierającą adres 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
Jeśli chcesz, aby wszystkie e-maile trafiały do systemu, możesz również
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