0

3 つのテーブルを持つ EF モデル (VS2010、.NET4) を作成しようとしました。各テーブルには Sync_ID と呼ばれる PK があります。

TABLE_HEAD: (Sync_ID (PK), GRID_ID int, SERIALNUMBER int, YEAR int)

TABLE_POINT: (Sync_ID (PK), GRID_ID int, SERIALNUMBER int, YEAR int,POINT_NUMBER int)

TABLE_PLANT: (Sync_ID (PK), GRID_ID int, SERIALNUMBER int, YEAR int,POINT_NUMBER int,PLANT_NUMBER int)

関連付け: TABLE_HEAD "1 対多" TABLE_POINT "1 対多" TABLE_PLANT

ご覧のとおり、TABLE_HEAD の GRID_ID、SERIALNUMBER、YEAR は、TABLE_POINT の GRID_ID、SERIALNUMBER、YEAR にマップする必要があります。

また、TABLE_POINT の GRID_ID、SERIALNUMBER、YEAR は、GRID_ID、SERIALNUMBER、YEAR、POINT_NUMBER にマッピングする必要があります。

私の最初のアプローチは、PK としてグループ化された GRID_ID、SERIALNUMBER、YEAR を使用することでしたが、それは条件違反になります。

したがって、唯一の方法は、Sync_ID を PK として使用することです。しかし、上記のように他のフィールドをマッピングするにはどうすればよいでしょうか? PK_Columns のみをマップできますか?

あなたが私を助けるためのアイデアを持っていることを願っています. 他のアプローチも歓迎します。よろしくお願いします !

4

1 に答える 1

0

他のアプローチは、正しいデータベース構造を作成することです!!!

あなたはSync_IDPKとして持っているので、あなたが説明した混乱をするのではなく、依存エンティティでFKとして使用してください。これは、正しい DB アーキテクチャと共通点はありません。リレーショナル データベースのポイントは、データの重複を最小限に抑えることですが、ほとんどすべてのデータを最初のテーブルからすべての従属テーブルにコピーします。さらに:

  • GRID_IDTABLE_HEAD が、の一意のインデックスを持っていない場合、1 対多の関係のプリンシパル エンティティになることはできませSERIALNUMBERYEAR
  • EF はまだ一意のインデックスをサポートしていないため、一意のインデックスを持っていても関係ありません。関連付けのプリンシパル エンティティとして参加するには、主キーである必要があります。

データベースの正規化について何か読む必要があります。

于 2011-07-21T13:00:33.587 に答える