0

最初の列がユーザー名を参照し、他の列が学生が行う各科目と各科目のスキルレベルを参照する表があります。これらの科目は、数学、芸術などのいくつかの主要な科目の流れに属しています。

次の表にデータを正規化します。

件名_ストリーム

id Main_Stream Subject
1 Math pure-maths

2 Math applied-maths

3 Art Dancing

4 Art Music

学生テーブル

id name subject skill_level
1 xxx Music 5
2 xxx Pur-math 4
3 xxx Applied-math 1
4 yyy Music 3



select subjects, skill_level where usename="xxx" order by Desc

同様のクエリを使用して、特定の学生の教科とそのスキル レベルを取得できます。

これとは別に、科目または科目のコレクションを選択するときに学生を選択する必要があります。そして、名前、科目、スキルレベルを降順で出力します。

ここでは、どの生徒もさまざまなストリームでさまざまな科目を行うことができます。

しかし、既存のテーブルからこの結果を簡単に取得することはできません。これを正しく行う方法は?データベース スキーマを改善する必要がありますか?

4

2 に答える 2

1

まず、データをより適切に正規化するために、テーブル構造に 2 つの小さな改善を提案したいと思います。次の場合、テーブルStudent_tableはわずかに整理されます。

  1. 代わりにname、studentends-table から user_id を参照します (つまり、学生の名前は、studentends-table にのみ存在することを意味します。覚えておいてください、名前は変更される可能性があり、結婚する可能性があります)。
  2. の名前の代わりにsubject、サブジェクトの ID を参照します。したがって、サブジェクトの名前はテーブルにのみ存在しますSubject_Stream

テーブルStudent_tableは次のようになります。

id user_id subject_id skill_level
--------------------------------
1  1       4          5
2  1       1          4
3  1       2          1
4  2       4          3

これに基づいて、記述したすべてのクエリを取得できるはずです。詳細については、質問を更新して、希望する結果がどのように見えるかの例をいくつか追加してください。

于 2013-06-23T17:48:40.107 に答える