sql >> Database >  >> RDS >> Mysql

Bewaar meerdere e-mailadressen in de database voor verschillende gebruikerstypes

Je hebt ofwel een e-mailtabel met een refererende sleutel die ofwel een system_id, account_id of customer_id is. Dan kunt u een veld hebben waarin het type van die externe sleutel wordt gespecificeerd. Een andere, meer gecompliceerde strategie zou zijn om nog steeds de e-mailtabel te hebben, maar geen externe sleutel. Een andere tabel die je email_relation zou noemen, bestaande uit de email_id en de refererende sleutel. Op die manier zou je één e-mailadres kunnen gebruiken voor alle drie de tabellen.

Voorbeeld van het gebruik van twee tabellen

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

als u de klantentabel inclusief het e-mailadres wilt

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

Als u alle e-mail naar een systeem wilt, kunt u ook

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 


  1. Oracle-aggregaat voor het samenvoegen van tekenreeksen met komma's en voor het schrijven van aangepaste aggregaten

  2. Queryprestaties meten:uitvoeringsplan Querykosten versus benodigde tijd

  3. MySQL COUNT() en nulls

  4. U kunt de doeltabel voor update niet specificeren in de FROM-component