3

私は面接に出ましたが、面接官によれば、私によれば非常にうまくいきました。彼は私に正しく答えたいくつかの質問と2つの実践的な質問をしました。それらの1つはデータベースに関連していました。

質問はこんな感じでした

学校はいくつかのクラスで構成されており、各クラスは複数の教師によって教えられているさまざまな科目を研究しています。どの教師がどのクラスのどの科目を教えているかを知ることができるようにデータベースを設計する必要がありますか?

とてもシンプルに見えて、私はそれをデザインしました。

何かのようなもの:

先生のテーブル

|  ID    |  Teacher_Name    |
-----------------------------
|   1     |   Ankit         |
|   2     |   Jack          |

クラステーブル

    |  ID    |  class_Name      |
    -----------------------------
    |   1     |   First         |
    |   2     |   Second        |

件名表

    |  ID    |  subject_Name    |
    -----------------------------
    |   1     |   English       |
    |   2     |   stats         |

そして、それらすべてを組み合わせて、どの教師がどのクラスのどの科目を教えているかを知るためのマスターテーブル

マスターテーブル

    |  ID     | Teacher_id  |  class_id |  subject_id  |
    ----------------------------------------------------
    |   1     |   1         |    1      |      1       |
    |   2     |   1         |    2      |      2       |

私が作ったものを明確にするために...彼が私にそうするように頼まなかったとしても、私は問題の選択クエリさえ書きました。

私はSQLの初心者なので、これが正しい方法かどうかはわかりませんが、データベースに変更を加える必要がある場合に非常に役立ちます。クラスまたはサブジェクトの追加例。

今、彼によれば、このデザインはまったく機能せず、彼は私が自分自身を初心者と見なすのではなく、初心者のレベルより下にあるべきだと言った。

ですから、これが正しいかどうか、そうでない場合はデータベースを設計する正しい方法を教えてください。

前もって感謝します。

4

4 に答える 4

6

とてもシンプルに見えました

それはおそらく問題の一部です。ほとんどのデータベースの問題は非常に単純に見えます。しかし、実際には非常に単純なものはほとんどありません。

  • すべての教師が、すべての学校ですべての教科を教える資格があるわけではありません。おそらく、教師と教師が教える資格のある教科を組み合わせた表が必要になるでしょう。
  • 一部のエンティティは、名前に完全な識別情報を含んでいます。(サブジェクトはそうですが、人々はそうではありません。)テーブルにID番号があるかどうかに関係なく、たとえば「subject_name」に一意の制約を提供しないことは間違いです(これは簡単に別の間違いになる可能性があります)。
  • 「マスター」は問題領域の用語ではありません。つまり、大学のコースカタログを見ても、「マスターチャプター」というタイトルの章やセクション、またはそのようなものはほとんど見つかりません。しかし 、各学期にどの科目が提供されるかを示すセクションがあり、それ
    が手がかりになります。大学では、すべてのコースがすべての学期に利用できるわけではありません。
  • また、「マスター」テーブル {teacher_id, class_id, subject_id} に対する一意の制約も必要です。
  • 同じテーブルで、 {teacher_id, subject_id} と {class_id, subject_id} で重複する外部キー制約が必要です。

私は続けることができました。しかし、これががあなたを雇わなかった理由です。

あいまいで不完全な要件が与えられました。(それはおそらく偶然ではありません。) あなたはそれらを明確にするのに十分ではありませんでした。

私はSQLの初心者です

私たちは皆、ある時点で初心者でした。

彼らは初心者を雇いたかったのですか?そうでない場合、それは別の問題かもしれません。

于 2012-07-14T12:36:09.840 に答える
5

1つの不具合を除いて、問題ないように見えますが、間違った科目のクラスに教師を割り当てた場合のマスターテーブルの不具合を除いて、データベースにその制約を設定することはできません。クラスと科目をマッピングする中間テーブルがもう1つあるはずですすなわち ClassSubjectMap

       ----------------------------------------------------
      |  CSMapID |  class_id |  subject_id  |
      ----------------------------------------------------
      |   1     |    1      |      1       |
      ----------------------------------------------------
      |   2     |    2      |      2       |
      ----------------------------------------------------

次に、このマップ ID をマスター テーブルで使用して、教師を教科にマップします。この方法では、生物学を工学クラスに教えるために教師を割り当てることはできません。これを除いて、他のテーブルは問題ないようです。

于 2012-07-14T06:49:55.300 に答える
4

多値依存と4NFについて

ここに画像の説明を入力

于 2012-07-14T15:58:01.640 に答える
0

特定の教師が教えられる教科に関する情報を明示的に保存したくない場合があります。実際、私たちはそのような情報を保存しない教育プロセスに関する実際のアプリケーションを持っていますが、まだ実装するほど必要ではありません。したがって、ユーザーが教師を教科やクラスに割り当てることを制限する要件が提供されていないことを考えると、それがなくても大丈夫だと思います。

あなたが制限したいと思うのは、特定のクラスに教えられる教科ごとに教師を 1 人だけ持つことです。したがって、列 {id, teacher_id, subject_id, class_id, semester_num} と {subject_id, class_id, semester_num} に対する一意の制約を持つ "Courses" という名前のテーブルのような単純なものを使用し、ここでは教師を属性として保持します。

于 2012-07-15T07:57:54.963 に答える