0

Sql Server 2008 で作成されたデータベースを使用して、(Expression Web 4 および Visual Web Developer 2010 Express を使用して) asp.net Web サイトを作成しています。

作成中の Web サイトは、訴訟事例を作成し、訴訟の種類を記録し、弁護士および/または支持者および/またはサポート スタッフが訴訟に取り組んでいると記録できるようにするためのものです。

したがって、「クレイマー対クレイマー」と呼ばれるケースは、2 人の弁護士、1 人の弁護士、4 人のサポート スタッフ全員がこのケースに取り組む離婚訴訟になります。しかし、別のケース「The People v Larry Flynt」は、弁護士 4 人、弁護士なし、サポート スタッフ 10 人の起訴事件である可能性があります。

これまでに行ったことは、次の列を含む「 Case Table 」というテーブルがあることです。

Case_ID (テーブルの主キー); Case_Type_ID; 弁護士_ID; Advocate_ID、および Support_Staff_ID。ケース テーブルの最後の 4 列は外部キーです。

Case_Type テーブルには、「Case_Type_ID」(PK) と「Area_of_law」の 2 つの列しかありません。Case_Type_ID は単純な数字 (001,002...) で、'Area_of_law' は char(30) です (訴訟、離婚、財産、犯罪者など)。ここまでは順調ですね。

問題は (これは支持者とサポート スタッフにも当てはまります)、単純に 3 つの列を持つ弁護士テーブルを作成した場合です。

列 = Lawyer_ID (主キーとして) | 名 | 苗字

レコード 1 = 001 | トム | トム | ハンクス

レコード 2 = 002 | トム | トム | クルーズ

レコード 3 = 003 | ダニエル | クレイグ

レコード 4 = 004 | ニコル | キッドマン

複数の弁護士をケースに割り当てるにはどうすればよいですか?

Case Table内で、正規化ルールに準拠するために、おそらく、上記のようにCase Tableに列を追加して Lawyer_ID_1 (FK)| を記録する必要があります。Lawyer_ID_2 (FK)| Lawyer_ID_3 (FK) | Lawyer_ID_4 (FK)。

だからそれは004かもしれません| 002 | ヌル | ニコール・キッドマンとトム・クルーズがこの事件に取り組んでいることを示すヌル. Lawyer_ID 列が 1 つしかない場合、Nicole Kidman と Tom Cruise がこの事件に取り組んでいることを示すには、'004,002' にする必要があります。

すべての弁護士を別のテーブルに記録することで、リストに弁護士の名前が入力されるため、Visual Web Developer 2010 Express で( Lawyer Tableにバインドされた)データバインドされたチェックボックス リストを作成できます。ですから、私はこのアプローチに満足しています。

しかし、次にLawyer Table内に 50 人の弁護士がいる場合、 Case テーブルに 50 列を弁護士だけに割り当てる必要があります (ケースが最終的に 50 人の弁護士で作業することになった場合)。Lawyer 列の数が影響を受けるため、弁護士が削除または追加されるとCase Tableが歪む可能性があるため、このアプローチには問題があります。明らかにこれは悪いアプローチなので、誰でも助けることができますか?

多数の列を使用せずに、1 つの「ケース」レコードを複数の「弁護士」レコードに関連付けることができるデータベース スキーマはありますか? (願わくば、このスキーマをSupport Staff TableAdvocate Tableにも適用できます)。

あなたの助けは大歓迎です。私は Web 開発と sql データベースの作業が初めてで、解決策を調べようとしましたが、問題のキーワードがわからない可能性があります。

4

1 に答える 1

0

これはおそらく多対多の関係です。あなたの場合の 3 つの関係を少し説明させてください。

各ケースに弁護士が 1 人しかいない場合、各弁護士は 1 つのケースにしか対応できない場合、1 対 1 の関係になります。

各ケースに弁護士が 1 人しかいないが、各弁護士が複数のケースに対応できる場合、1 対多の関係になります。同様に、各ケースに複数の弁護士がいる場合でも、各弁護士は 1 つのケースにしか対応できない場合でも、1 対多の関係が維持されます。

各ケースに複数の弁護士がいて、各弁護士が複数のケースに取り組むことができる場合、多対多の関係があります。

多対多の関係に対する一般的な解決策は、関係を説明する 3 番目のテーブルを用意することです。

create table casesALawyerWorksOn (case_id, lawyer_id)

@albert、@brad、@christine がケース @peopleVflynt に取り組んでいる場合:

insert into casesALawyerWorksOn (case_id, lawyer_id) values
    (@albert, @peopleVflynt)
    (@brad, @peopleVflynt)
    (@christine, @peopleVflynt)

したがって、弁護士@fredが取り組むすべてのケースは次のとおりです。

select case_id from casesALawyerWorksOn where lawyer_id = @fred

そして、@kramerVkramerの事件に取り組むすべての弁護士は次のとおりです。

select lawyer_id from casesALawyerWorksOn where case_id = @kramerVkramer
于 2013-08-15T03:28:40.500 に答える