データベースでこれらの関係をどのようにモデル化しますか?
PageElements を含むことができる Page エンティティがあります。
PageElement は、たとえば Article や Picture にすることができます。Article テーブルには、明らかに、Picture 以外のメンバー/列があります。記事には ie が含まれる場合があります。「Title」、「Lead」、「Body」列はすべて nvarchar 型ですが、Picture には「AltText」、「Path」、「Width」、「Height」などがあります。私はこれを拡張可能にしたいのですが、3 か月でどのような PageElements が必要になるかは誰にもわかりません。したがって、PageElementTypes テーブルが必要になると思います。
リレーションシップについては、次のようなテーブルはどうでしょうか。
Id を持つページ、およびその他の巨大なジャンボ。(作成日、表示可能、その他)
PageIdと PageElementId を持つ Pages_PageElements。
Id とPageElementTypeIdを持つ PageElements と、さらに巨大な (SortOrder、Visibility など)。
ID と名前を持つPageElementTypes (たとえば、"Article"、"Picture"、"AddressBlock")
ここで、すべての Articles、Pictures、AddressBlocks テーブルに PageElementId 列を作成して、作業を終了する必要がありますか? これは単純な 1 対 1 の関係であるため、これでうまくいくはずですが、どういうわけか何かを見落としている可能性があります。
ファローアップ:
個別の属性を使用した以下の推奨ソリューションでは、すべての属性を同じタイプとして保存する必要がありますか? 1 つの PageElement の属性が nvarchar(255) で、一部が nvarchar(1000) の場合、一部が整数の場合はどうなりますか?
EAV の方法を取得した場合、そこにあるすべての異なるデータ型の属性値を保持するために、大量のテーブルを作成する必要があります。