4

Ruby-on-Rails では、これを「ポリモーフィック アソシエーション」と呼びます。

私のアプリケーションにはいくつかのCommentableものがあります。それぞれの表は以下のとおりです。

Post
id | title | text | author (FK:Person.id) | ...

Person
id | name | ...

Photo
id | title | owner (FK:Person.id) | path | ...

Comments次のようにテーブルを追加したいと思います。

Comments
id | commentable_type | commentable_id | text | author (FK:Person.id)

この方法でデータベースの参照整合性が失われることは理解していますが、他の唯一のオプションは複数のCommentsテーブルを持つことです: PostCommentsPersonCommentsPhotoComments、 ...

そして今、質問のために:

Comments.commentable_type最初に からテーブル名を取得し、次に から ID を取得して、ルックアップを行う方法を理解するフォームを作成するにはどうすればよいComments.commentable_idですか?

4

2 に答える 2

4

この手法は、SQL の世界では「サブクラス化」として口語的に知られています。実際の例 (SQL Server の構文ですが、MS Access に簡単に適用できます) については、David Porta のブログを参照してください。.

あなたのシナリオでは、すべてのコメントに共通のデータ項目はコメント テーブルにあります。各タイプに固有のものは、PhotoComments などの特殊なテーブルにあることに注意してください。FK は、ID とタイプの 2 列の複合体でなければならないことに注意してください。 PersonComments テーブルに表示される写真のコメントとして何かを入力したい。

于 2008-10-01T08:32:43.263 に答える
0

そういう意味でメタテーブルを作っている人は多いと思います。あなたがそれを説明したのとほとんど同じです。

于 2008-09-30T18:04:50.837 に答える