#実現したいこと
MySQLで以下のことを実現したいと思っています。
「レコードの入った『ノード』に対し、
各ノード同士のつながりをあらわす『線』
を扱う」
たとえば、以下のようなアプリをつくることを考えてみます。
「データベースに登録されている人たちの名前を表示し、友達同士の人は線で繋ぐアプリ」
すると、以下のように、
メンバーのデータを扱うテーブル『Member』と、
友達関係のメンバー同士のつながりのデータを扱うテーブル『Connection』
を作ることになると思います。
テーブル:Member
Mem_code | name | family name |
---|---|---|
1 | John | Smith |
2 | Ellen | Jager |
3 | Ella | Fitzgerald |
4 | Takahiro | Karasawa |
... | ... | ... |
Mem_codeは、メンバーを区別する主キー。
テーブル:Connection
Con_code | person1 | person2 |
---|---|---|
1 | 3 | 1 |
2 | 26 | 4 |
3 | 1 | 13 |
4 | 2 | 4 |
… | … | … |
person1とperson2の値は、テーブル『Member』のMem_code。
Con_codeは、つながりを区別する主キー。
こんな具合にデータベースを作ったら、あとはUIのプログラミングで、
各メンバーデータをノードに、各つながりデータを線に対応させるようにすることになります。
ここで問題なのが、テーブル『Connection』における、つながりデータの管理です。
Mem_codeが1の人と3の人のつながりを考えると、(person1, person2)の値は
上記のようなテーブルだと、そのままだと
(1,3)と(3,1)は別モノ
となりますが、
今回は、漠然とした「つながり」を考えているので、1 -> 3と 3 -> 1 という風に方向によって区別しないようにしたいです。
なので、
(person1,person2)に(1,3)が登録されている状態で(3,1)が入力されたら、重複判定をして登録をはじく
という設計にしたいです。
そうするためには、どうすればいいでしょうか?
「もし、RDBMSに順不同解析機能のようなものがあるのなら、Con_codeを使わず、(person1,person2)を複合主キーにしてしまえばいいのかもしれない」
などいろいろ考えましたが、
そこら辺の細かいRDBMSやMySQLの仕様がよくわからないので、質問させて頂きます。
それとも、冒頭のことを実現するには、根本的にデータベース設計を変えた方がいいのでしょうか?
ご回答お待ちしております。
回答4件
あなたの回答
tips
プレビュー