sql >> データベース >  >> RDS >> Mysql

さまざまなユーザータイプの複数の電子メールアドレスをデータベースに保存する

    system_id、account_id、またはcustomer_idのいずれかである外部キーを持つ電子メールテーブルがあります。次に、その外部キーのタイプを指定するフィールドを持つことができます。もう1つのより複雑な戦略は、電子メールテーブルを保持し、外部キーを保持しないことです。 email_idと外部キーで構成されるemail_relationと呼ぶ別のテーブル。そうすれば、3つのテーブルすべてに1つの電子メールアドレスを使用できます。

    2つのテーブルの使用例

    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 
    


    1. レコードの選択方法GROUP(group by)内にMAX(some_field)が含まれています

    2. PDOデバッグ-バインド後にクエリを表示しますか?

    3. MariaDBの時間値からマイクロ秒を抽出する4つの関数

    4. ファイルパスをデータベースに保存する