第16回 JavaのN:M と リレーショナルDBのN:M 

リレーショナルDBでは、N:Mを表現することは無理。
だから間にテーブルを作り、1:N, 1:Mの構造を作る。


それに対してJavaではN:Mの構造を作ることが可能。
人間のそもそもの思考は実はこちらに近い。

大学の授業で、講義と生徒がN:Mにあたるもの。
講義は複数の生徒を持つし、生徒は複数の講義を持つ。

N:Mをあらわしたもの

ソースを具体的にハッシュ的に表したもの
{
  '数学' => [ 
             { '生徒1' => ['数学', 'PG', ...  ] },
             { '生徒2' => ['数学', 'Unix', ...] }
            ]
  'PG'   => [
              {'生徒1' => ['数学', 'PG', ... ] },
              {'生徒3' => ['PG', ... ] }
            ]
}
クラス定義(型定義)で表したもの
Class 講義{
  講義名:String
  生徒群:List<生徒>
}

Class 生徒{
  生徒名:String
  講義群:List<講義>
}

1:N, 1:M

1:N, 1:Mならば、真ん中に講義名から生徒を返し、生徒名から講義名を返すマッピングクラスが入る。要は、リレーショナルDBでテーブルが3つあるのだから、インスタンスも3つできるという話。