1

私は現在、EntityFrameworkを介してアクセスされるSQLServerリレーショナルデータベースに取り組んでいます。適切な答えが見つからないように思われる質問がいくつかあります。

私のデータベースモデル図をご覧ください。

ここに画像の説明を入力してください

1.ProblemType実装が正しい方法である かどうかはよくわかりません。現在設定されているように、両方の列にはaまたは。ProblemTypeが含まれるため、両方の列でnull値を使用できます。したがって、問題は、テーブルを削除してモデルを非正規化し、テーブルとテーブルの両方を関連付けることが可能かどうかということです。ProblemTypeRoadIDProblemTypeVandalismIDProblemTypeProblemTypeRoadProblemTypeVandalismProblemDesc

2.Problemテーブルを 見ると、という名前の列がありますHistoryIDs。この列には、すべてがにHistoryIDs関連するコンマ区切りの文字列が含まれている必要がありますProblem。Aは、変更されるたびにコピーされるため、HistoryID基本的にProblemDescID(aは更新されるたびに列がtrueに設定されるため)ProblemDescです。私の質問は、列に複数を追加するための最良の方法は何ですか?「1,5,7」のようなものであれば、特定ののすべての履歴を簡単に見つけることができます。IsHistoryProblemDescProblemDescIDsHistoryIDsProblemDesc

3. 図に関する他の提案も大歓迎です:)

前もって感謝します!

編集:改訂された図を検討してください:

ここに画像の説明を入力してください

あなたが私に改善のためのいくつかの素晴らしい提案をしてくれたので、私はあなたの提案のほとんどを実行しようとしました。ProblemType削除され、ProblemHistory追加されました。親テーブルへの方法WorkerCommentと関連性にも変更が加えられました。Mediaこの実装は機能しますか?

ありがとう!

4

1 に答える 1

3
  1. problemtype テーブルを削除して、problemtyperoad と problemtypevandalism を問題タイプ ID を持つ problemtype テーブルに関連付けるだけです。

  2. いいえ、そうすべきではありません。列 ProblemID と HistoryID を含むテーブル ProblemHistory があり、各履歴の行が含まれている必要があります。

  3. 複数の問題に関連するワーカーのコメントを付けることができるようです。それは逆であるべきですか?メディアと ProblemDescs についても同様です。1 つのワーカーだけが問題に取り組むことができますか? また、MSSQL には、CoordinateLat と CoordinateLng の代わりに使用できる地理タイプがあります。

于 2012-11-20T09:05:21.453 に答える