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

多対多の関係をモデル化するための最良の方法

    参照整合性を適用しながら必要なすべてを可能にする適切なモデルは、次のようになります。

    CREATE TABLE contact (
      contact_id serial PRIMARY KEY
    , name text
    , phone text
    , ...
    );
    
    CREATE TABLE product (
      product_id serial PRIMARY KEY
    , ...
    );
    
    CREATE TABLE product_role (
      role_id int PRIMARY KEY
    , role text UNIQUE
    );
    
    CREATE TABLE product_contact (
      product_id int REFERENCES product
    , contact_id int REFERENCES contact
    , role_id    int REFERENCES product_role
    , PRIMARY KEY (product_id, contact_id, role_id)
    );
    

    同じ連絡先が同じ製品に対して複数の役割を演じることができない場合は、PKにその役割を含めないでください:

    , PRIMARY KEY (product_id, contact_id)
    

    これにより、product_roleに行を追加するだけで済みます。 追加のタイプの連絡先を許可します。

    異なる役割でいっぱいの手しかない場合、データ型"char" role_idには便利かもしれません 。

    基本:



    1. \ r\nをPHPに置き換える

    2. 別の選択クエリの結果の10行目、20行目、30行目...を選択するにはどうすればよいですか?

    3. Oracle-参照カーソルから特定の列を選択します

    4. 別のフィールドの値が設定されている場合、MYSQLはフィールドデータを非表示にします