Anda juga memiliki tabel email yang memiliki kunci asing yang berupa system_id, account_id, atau customer_id. Kemudian Anda dapat memiliki bidang yang menentukan jenis kunci asing itu. Strategi lain yang lebih rumit adalah tetap memiliki tabel email tetapi tidak ada kunci asing. Tabel lain yang Anda sebut email_relation terdiri dari email_id dan kunci asing. Dengan begitu Anda dapat menggunakan satu alamat email untuk ketiga tabel.
Contoh penggunaan dua 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
jika Anda ingin tabel pelanggan menyertakan alamat email
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
Jika Anda ingin semua email ke sistem, Anda juga bisa
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