0

免責事項: これらのテーブルは私が設計したものではなく、このデータを保存する最良の方法ではないことを認識しています。状況を処理する最善の方法についてアドバイスが必要です。

2 つの MySQL テーブルがあります。

`students`
id        int; primary, unique
prof1_id  varchar 
prof2_id  varchar 
prof3_id  varchar 

`professors`
id         int; primary, unique, auto-increment
username   varchar
fname      varchar
fname      varchar
students_id int
comment    text

教授のユーザー名は、students表の最後の 3 つの列のいずれかにある可能性があります。教授は、表の行にコメントがある学生ごとに 1 つのコメントを提供する必要がありstudentsます。

このデータベースのフロント エンドであるアプリケーションでは、professorsテーブルにさらに 2 つの列 (student_id と comment) が必要です。professors各学生の行には 3 人の教授がいる可能性があるため、複数の学生のためにリストされている場合は常に新しい行を追加する必要があります。これは、professors新しい生徒のコメントごとに id フィールドを自動インクリメントする必要があることを意味します。

MySQL クエリを使用してこのデータ転送を実行する最善の方法は何ですか? JOIN と組み合わせて UPDATE を調べてみましたが、これを行う有効な方法があるかどうかさえわかりません。professorsまた、複数の行が同じ ID を持つため、別の主キーを作成する必要がありますか?

これを実現するには VIEW が最適な方法ではないかと思いますが、フロント エンドのアプリケーションは情報がprofessorsテーブルに格納されることを期待しています。

私が考えていたもう 1 つのことは、2 つのテーブルを結合して新しいテーブルを作成し、2 つの列の主キー、students.id、professor.id を持つことができるということでした。

ありがとう!

4

1 に答える 1

0

また、複数の行が同じ ID を持つため、教授用に別の主キーを作成する必要がありますか?

はい。これは良い考えです。

最初のテーブルのデータを 2 つの列にマージする単純なクエリを作成しました。これは完全な答えではありませんが、大いに役立ちます。

SELECT id, prof1id as profid
UNION
SELECT id, prof2id
UNION
SELECT id, prof3id
UNION;

これをビュー、挿入に使用することもできますが、特定の MySQL 構文に慣れていないため、誤解を招きたくありません。動作する場合はフィードバックをお願いします。

「UNION」は重複行を削除します。重複を保持するには「UNION ALL」を使用する必要がある場合があります (2 つまたは 3 つの教授列の重複値など)。

于 2012-02-27T18:02:14.120 に答える