1

データベースの構造と設計は初めてです。現在、コース名と日付に従ってコースの説明に一致するコースカタログを作成中です。course_codenameおよびその他すべての関連情報を含むコースを説明する 1 つの表をスケッチしました。次に、これらのコースをいつ教えられるかを示す別の表をスケッチしました。

に分類されるクラスがありませんall_year。また、専攻の下でコースにラベルを付ける方法がありません。仮説として、コースは複数の専攻に属する可能性があるため、データをあるコースから別のコースに入れると、データを複製する必要があります。この2つのことをテーブルデザインにどのように実装するかについてのアイデアはありますか? または、私のデザインを再構築する方法の提案。可能であれば、phpmyadminDB で実行するクエリを教えてください。

テーブルコースの一例

id serial
course_code text
description text

テーブル course_dates の例

id serial
course_id serial
year date
semester 

テーブルメジャーの例

major_id int
course_id int

したがって、移入されたデータベースには次のものが含まれる可能性があります。

Table courses
id course_code description
1  INF1000     "Basic programming"
2  INF1001     "More basic programming"

テーブル course_dates (春は 0、秋は 1)

id course_id year semester
1  1         2012 0
2  1         2013 1
3  2         2013 1
4

1 に答える 1

1

コースを専攻にリンクするには (これは 1 対多の関係です (1 つのコースと多くの専攻))、このタイプの構造を持つリンク テーブルを使用します。

 table courses_majors
 major_id int
 course_id int

このテーブルにもインデックスを付けることを忘れないでください。これは非常に重要です。次に、データを入力して、1 つのコースを多くの専攻に、また多くのコースを 1 つの専攻に (多対多の関係) 設定することもできます。

次に、このテーブル全体でテーブルの結合を実行できます。

select * from courses left join courses_majors on courses.id = courses_majors.course_id left join majors on courses_majors.majors_id = majors.id

もちろん、WHERE 句などを追加することもできます。

もう 1 つの方法は、メジャーのテーブルを作成することです。

 majors
 id int
 name varchar

次に、コース テーブルに major_id を追加します。これにより、コースから専攻への 1 対 1 の関係が得られますが、多くのコースが専攻に参加できます。

年次に関しては、これを説明するためにデータベースにフィールドを追加するだけです。おそらく小さな int で、0 または 1 にします。

于 2012-10-31T03:33:09.230 に答える