Bạn có một bảng email có khóa ngoại là system_id, account_id hoặc customer_id. Sau đó, bạn có thể có một trường chỉ định loại khóa ngoại đó. Một chiến lược khác phức tạp hơn sẽ là vẫn có bảng email nhưng không có khóa ngoại. Một bảng khác mà bạn sẽ gọi là email_relation bao gồm email_id và khóa ngoại. Bằng cách đó, bạn có thể sử dụng một địa chỉ e-mail cho cả ba bảng.
Ví dụ về việc sử dụng hai bảng
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
nếu bạn muốn bảng khách hàng bao gồm địa chỉ 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
Nếu bạn muốn tất cả e-mail vào một hệ thống, bạn cũng có thể
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