だから、これは良いです。それが適用されていないタイプのヌル参照を持つことができます注
- 一つのタイプ(注ノートがために作られた任命への参照を持っていますが、nullになります
- 複数のノートタイプ(AppointmentNote、AccountNote)は、同じロジックを複製しますが、メモの参照が無関係にならないようにしています。
どちらもありません。また、私たちがあなたの物やテーブルについて話しているかどうかについては完全にはっきりしていません。
メモの種類は1つです。それは、それがまったく関連しているオブジェクトを参照すべきではありません。
public class Note
{
public DateTime CreatedAt { get; set; }
public string Content { get; set; }
}
public class Account
{
public ICollection<Notes> Notes { get; }
}
public class Appointment
{
public ICollection<Notes> Notes { get; }
}
はその後でサポートするものの、必ずしも容易ではない(任意のORMをサポートするために簡単にする必要がありますどちらのデータベーステーブルをレイアウトする方法、のカップルがありません - 本当に-ORM-が、 -half-look-like-one(Linq2SQLやSubSonicなど、データベーステーブルごとにクラスを生成するツール)。
まずDBレイアウト:
TABLE Notes
(
Id,
CreatedOn,
Content,
AccountId,
AppointmentId
)
だから何のn-1外部キーがnullの場合。これは、クラスごとの階層構造であり、特定のサブクラスでは無意味な列を持つために受け入れられます。
第二の方法:
TABLE Notes
(
Id,
CreatedOn,
Content
)
TABLE AccountNotes
(
AccountId,
NoteId
)
TABLE AppointmentNotes
(
AppointmentId,
NoteId
)
そして、これは、テーブル・クラスごとのレイアウトのより多くのだろう。コード内でサブクラス化されたNote型が実際に必要であるとは言わないが、たとえそれを行っても、 "ツールとの戦い"を避けるために、論理の重複を意味するものではない。
最後に、選択する必要があります。任命に関する注釈は本質的に勘定科目とは異なりますので、あなたはあるレベルでそれに対処しなければなりません。
永続オブジェクトで起こるためには、n-1フィールド(nはそれらにメモを付けることができるオブジェクトの数)に対して、Noteはnull fkeysを持ちます。それが私が最初の方法で持っている問題の要点です。多重度は '予約/勘定1 - *注' –
@ SnOrfusです:あなたのORMについての何かが見えていないのかもしれません。しかし、少なくともドメインの観点からは、それらに適用される注釈をオブジェクトに持たせるのが理にかなっているようです。ノートで始まり、その親を見つける必要がある場合を除きますか?私はノートがファーストクラスの親オブジェクトに第2クラスのアドオンであると考えました。なぜノートは親を参照する必要がありますか? – David