2011-07-21 7 views
0

私はProject、Client、Taskのようなエンティティを持っていますが、それらのすべてに投稿のリスト(別名ディスカッション)が必要です。問題は、すべてのエンティティ(プロジェクト、クライアント、..)がそれ自身のテーブルにマップされているため、id = 1のクライアントとidを持つプロジェクトを曖昧にするので、そのエンティティを "owner_id" = 1であり、ディスカッションはプロジェクトまたはクライアントに属しているかどうかは分かりません。私は独立したディスカッションエンティティをクライアントと別の独立したディスカッションエンティティをプロジェクトに持つことを避けたいと思います(後で、別のエンティティにディスカッションを追加して、スケーラブルではないため)。私はclientDiscussionとprojectDiscussionを区別するディスカッションにdiscriminator属性(列)を追加できることを知っています。そんなことをするのが正しい方法なのかどうかは疑問だ。あなたは何を変えるのですか?複数のエンティティのディスカッションを設計する方法

答えて

0

抽象的なエンティティを作成する必要があるように思えます。

EntityType<-Entity<-EntityDiscussion->Discussion 

enter image description here

プロジェクト/クライアント/タスクのフィールドどのように異なっていますか?

+0

かなり異なっています。私は本当にクライアントとプロジェクトとタスクが共通の祖先を持つべきだとは思わない。将来、別のエンティティ(祖先を共有しない)にディスカッションを追加すると、問題は解決しません。 – mawek

0

ディスカッションは単一のエンティティについてのみ行うことはできますか?それで、弁別器の使用が私が使用してきたアプローチであれば、明らかな代替品がなぜあなたにとって役に立たないのかを概説しました。

私の本能は現実世界でのことです。ディスカッションは常に1つの種類のものを参照するとは限りません。したがって、トピックエンティティが必要な場合もあります。ディスカッションには多くのトピックが含まれているため、弁別者の必要性が残ります。

+0

はい、ディスカッションは単一のエンティティに属します。私はjiraのようなプロジェクト管理webapp - sometehingに取り組んでいると言います。ユーザーが特定のプロジェクトやクライアントやタスクにコメントを追加する可能性があります。この場合、エンティティ自体(プロジェクト、タスク)がトピックとして機能しています。 – mawek

関連する問題