आपके पास या तो एक ईमेल तालिका है जिसमें एक विदेशी कुंजी है जो या तो एक system_id, account_id, या customer_id है। फिर आपके पास उस विदेशी कुंजी के प्रकार को निर्दिष्ट करने वाला फ़ील्ड हो सकता है। एक और अधिक जटिल रणनीति यह होगी कि अभी भी ईमेल तालिका हो लेकिन कोई विदेशी कुंजी न हो। एक अन्य तालिका जिसे आप ईमेल_रिलेशन कहेंगे जिसमें ईमेल_आईडी और विदेशी कुंजी शामिल है। इस तरह आप तीनों तालिकाओं के लिए एक ई-मेल पते का उपयोग कर सकते हैं।
दो तालिकाओं के उपयोग का उदाहरण
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
यदि आप ई-मेल पते सहित ग्राहक तालिका चाहते हैं
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
यदि आप किसी सिस्टम को सभी ई-मेल चाहते हैं तो आप
. भी कर सकते हैं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