2011-07-06 24 views
0

フィールドSUBJ_IDSUBJ_NAMEのテーブルSUBJECTがあります。別の表は、COURSE_NAME,SUBJ_NAME、およびSUBJ_IDのフィールドを持つCOURSESと呼ばれます。私の目標は、COURSEテーブルにテーブルが入力されたときに、テーブルSUBJ_IDSUBJ_IDテーブルのSUBJECTテーブルから自動的に更新することです。例えば1つのMySQLテーブルから別のテーブルにデータを転送する

SUBJECTテーブルには、次のデータがあります。

+-----------+-------------+ 
| course_ID | course_name | 
+-----------+-------------+ 
|  1  | math  | 
|  2  | physics  | 
+-----------+-------------+ 

私はCOURSESテーブルに入力した場合:

INSERT INTO `courses` VALUES('Algebra 101', 'Math'); 

私はそれが自動的に1に等しくなるようにSUBJ_IDを更新することができどのように?

+0

COURSESテーブルからSUBJ_NAMEを削除すると、その冗長性..googleデータベースの正規化 – slier

答えて

3
は、以下のようなものにあなたのテーブルのスキーマを変更し

+-----------+-----------+ 
| subj_id | subj_name | 
+-----------+---------+-+ 
|  1  | math  | 
|-----------+-----------+ 

coursesテーブルにsubj_nameを取り除くコース表

+-----------+---------+------------+ 
| course_id | subbj_id|course_name | 
+-----------+---------+------------+ 
|  1  | 1  | math  | 
|-----------+---------+----------- + 

件名表(理由冗長性があり、データcorrにつながる可能性がありますあなたの場合のように)。これによりデータが正規化され、結合を介して情報を取得できます。

subj_idとsubj_nameを持つサブジェクト表がある場合は、subj_idがプライマリ・キー(一意の識別子)である必要があります。 2番目のテーブル(コース)には、course_id、course_name、およびsubj_idが必要です。 course_idは主キー(一意の識別子)でなければなりません。サブジェクトテーブルのsubj_idとコーステーブルのsubj_idの間には、1対多の外部キーがあります。

これが設定されたら、このクエリを使用します。

select c.course_name, s.subj_name from courses AS c inner join subject AS s on c.subj_id = s.subj_id; 

これは、それが属するコースと対象を引っ張ってきます。

サブジェクト名を更新する必要があるときは、subject.subj_nameという1つの場所でのみ変更する必要があり、その関係のために上書きされます。

これが多すぎる場合は、データの正規化と関係の設定を正しく読んでください。

運が良かった!

関連する問題