2009-08-28 11 views
0

私の頭にはドメインモデルがあり、SubSonic互換のdbスキーマを構築する際に問題があります。この例でどのように進むのか教えていただけたら助かります3つのエンティティ(SqlServerまたはMySqlは私にとっては関係ありません)SubSonicを使い始める際に問題が発生する

件名 - 教育対象(例:三角法、微積分)を表します。 Props-名

技術 - 特定の質問を表す - 運動(例えば、余弦の法則、ピタゴラスの定理) Props-名、FatherSubject

運動を解決するために使用される技術を表します。 小道具 - 科目、技術(練習問題の解決に使用されたもののみ)、難易度(難易度、難易度、難易度)、回答(int)。

So: Many to Many-エクササイズ - >科目、エクササイズ - >テクニック 1対多 - 科目 - >テクニック。 難易度は列挙型です。

私はそれを掛けることを始めたら、私はドキュメントに貢献しています。

答えて

1

最も簡単な方法は、多対多リレーションシップの間にブリッジテーブルを作成することです。

Table: Subject 
Columns: Subject_ID (PK) 
     Name (UK) 

Table: Technique 
Columns: Technique_ID (PK) 
     Name (UK) 
     Subject_Name (FK) 

Table: Exercise 
Columns: Exercise_ID (PK) 
     Difficulty_ID (FK) 
     Question_Text 
     Correct_Answer_ID (FK) 

Table: Difficulty 
Columns: Difficulty_ID (PK) 

Table: Exercise_Answer 
Columns: Answer_ID (PK) 
     Exercise_ID (FK) 
     Answer_Text 

Table: Exercise_Technique 
Columns: Exercise_Technique_ID (PK) 
     Exercise_ID (part of UK, FK) 
     Technique_ID (part of UK, FK) 
  • 多くの技術に従うことを条件
  • 行使行使
  • (Exercise_Techniquesを経由して)多くの技術に多くの回答

に別のテーブルへの回答を分離し、正しいを使用していないことにより、 (2番目の回答として)回答IDをランダムにすることができますが、answer_id値とexercise.correct_answer_idを比較することによって、どちらが正しい回答であるかが分かります。

+0

ありがとうございます。 ブリッジテーブルの列の表記規則が[table_name1] [ID]、[table_name2] [ID]、[name_of_primary_key1]、[name_of_primary_key2]、さらにはSubSonicこのコンベンションを使用しますか?すべての医師が言う "それはあなたのためにいくつかの魔法を回転させます" ... –

+0

上記のどれもがSubSonicに特有のものではありません。関係が有効である限り、SubSonicはクラスとコードを生成することができます。 これは単純なデータベース設計です。一貫性があり、他の人にやや意味がある限り、列の名前は何でも構いません。私はtablename_idとして私のPKsの名前を付け、FKsのために同じフィールド名を使用することを好む(私は、フィールド名の前にあるcorrect_answer_idのような何かユニークなものでない限り)。 –

1

私はSimpleRepositoryを使用するように言うだろう: http://www.subsonicproject.com/docs/Using_SimpleRepository

私はあなたが必要なテーブル/制約を生成します多対多アソシエーションの自動移行とそれを更新しようと思います。私はそれを歩いているので、今は数週間必要です。

myname @ gmailが好きな人は(マイグレーションせずに)私に電子メールでメールを送ることができます。

+0

こんにちは。私はあなたがSimpleRepositoryの関係をどのように処理するのかに非常に興味があります!ブリッジテーブルを作成して各オブジェクトdefenitionに関連付けることによって処理されるプロパティとして別のクラスのリストを持つクラスを持つことができますか?このリストを管理するには、(ParentObjectの)Update(parentObject1)を処理し、deleteおよびupdate dbコマンドを呼び出しますか? –

関連する問題