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

多対多の関連付けの結合テーブルにオプションはありますか?

    • モデルがカラーグループを共有しない場合、デザインは1つのテーブルになります:

      model [model] comes in color [color]
      
    • モデルがカラーグループを共有する場合は、2つのテーブルがあります:

      model [model] comes in the colors of group [group]
      group [group] has color [color]
      

      これらのテーブルは、最初のテーブルへの投影と結合します:

      SELECT model, color FROM model_group NATURAL JOIN group_color
      
    • モデルに、グループに加えて、またはグループの代わりに、例外的な使用可能な色および/または使用できない色を含めることができる場合は、例外テーブルを用意します。テーブルのグループがデフォルトになりました 色(ある場合):

      model [model] has default color group [group]
      group [group] has color [color]
      model [model] is exceptionally available in color [color]
      model [model] is exceptionally unavailable in color [color]
      

      次に、例外テーブルは、JOIN-plus-PROJECT / SELECTとそれぞれUNIONされ、MINUSED / EXCEPTEDされて、最初のテーブルになります。

      SELECT group, color FROM model_default NATURAL JOIN group_colour
      EXCEPT SELECT * FROM model_unavailable
      UNION SELECT * FROM model_available
      

    「冗長性」とは、複数の場所に値が表示されることではありません。これは、アプリケーションについて同じことを示す複数の行に関するものです。

    すべてのテーブル(およびクエリ式)には、(named-)blanksステートメントテンプレート(述語)が関連付けられています。真のステートメントを作成する行はテーブルに配置されます。 2つの独立した述語がある場合は、2つのテーブルが必要です。関連する値は、それぞれの行に表示されます。

    アプリケーションに関するステートメントを作成する行については、こちらを参照してください。 (そして、テーブルの「ステートメント」または「基準」について他の回答を検索してください。)正規化は、行が「... AND ...」の形式のものを示すテーブルを、「...」を示す他のテーブルに置き換えるために役立ちます。 " 別々に。これとこれを見てください。

    グループを共有し、モデルと色に1つの2列のテーブルのみを使用する場合、その述語は次のとおりです。

    FOR SOME group
        model [model] comes in the colors of group [group]
    AND group [group] has color [color]
    

    したがって、2番目の箇条書きは、この述語から単一の「AND」、つまり「多値従属性」のソースを削除します。それ以外の場合、モデルのグループまたはグループの色を変更する場合は、複数の行を同時に一貫して変更する必要があります。 (重要なのは、スペースを節約するのではなく、冗長性によるエラーと複雑さを軽減することです。)

    文字列を繰り返したくない場合 実装(依存)の理由(より多くの結合を犠牲にして必要なスペースまたは操作の速度)のために、名前IDと文字列のテーブルを追加し、古い名前の列と値をid列と値に置き換えます。 (これは正規化ではなく、実装に依存するデータ最適化のトレードオフのためにスキーマを複雑にします。デモンストレーションする必要があります。 これは必要であり、機能します。)



    1. 作業フォルダのソース管理を使用したデータベースの変更の追跡

    2. ストアドプロシージャを実行する場合、CommandType.Textを使用するのと比較してCommandType.StoredProcedureを使用する利点は何ですか?

    3. PostgreSQLの時間値に時間を追加する

    4. PL / SQLを介してOracleをエクスポートしようとすると、日付は0000-00-00になります。