2012-01-07 18 views
0

「コースフィールド」を持つ食品のリストを持っている場合は、コースとしてテキストとして入力するのが理にかなっていますか(「Entree」)、作成するのがよいでしょうかコーステーブルを作成し、外部キー参照を使用しますか?これはコースと食べ物の1対多の関係ですが、食べ物とコースの間には1対1の関係がありますか?テーブル構造を最適化するMySQL

ありがとうございました。

+0

"フード"の定義と "コース"の定義は何ですか? –

+0

"これはコースと食べ物の間に1対多の関係ですが、食べ物とコースの間には1対1の関係があります"これはちょっと混乱した言葉です。 –

答えて

1

私はすべてのために別々のテーブルを作成しましたが、時にはそれは価値があるよりも面倒です。したがって、メンテナンスによって異なります。あなたはこれらの値を変更しようとしている場合とのような大規模な行うにしたくない:あなたが値を変更する必要がある場合は、おそらく外部表には、このような悪い考えではありません

UPDATE tblFood SET course = 'Main Entree' WHERE course = 'Entree' 

を。この問題は、データベースを照会する必要があるときに発生します。他の表を内部または外部に結合する必要があります。

DBAは、text/varchar値をインデックスすることでひどい仕事をしたと私は言っていました。外部テーブルメソッドが生まれたのはその理由です...私が完全に信じているかどうかは分かりませんが、これのはるかに良い仕事をして、クエリをはるかに簡単にします。

外部テーブルを使用する必要があるかどうか、10種類の理由で10種類の回答が表示されますが、特定のニーズが何回あるかはさまざまです。これが少し助けてくれることを願います。

+0

つまり、JOINステートメントを使用する必要があるため情報を照会するのは難しいですが、更新が簡単です。 – Apollo

+0

正確には、コース値とその値自体を表す整数または一意のIDを持つ可能性が高いからです。もしあなたがtblCourseにコースの名前に加えておそらくアクティブなフラグフィールドとおそらくオーダーの優先順位があると思うなら(コースを注文することができます)、おそらく追加のテーブルがあります。近い将来に1つの値で追加フィールドがない場合は、更新は難しいかもしれませんが、更新ステートメントに慣れている場合は、そのような更新を行う前にシステムのバックアップを作成してください。シングルテーブルアプローチ。 –

0

私はコースと食品のために1:Mに固執します。これがシナリオならば、私はコースのための別のテーブルを作成し、食べ物のための別のテーブルを作成し、コーステーブルの外来キーとしてcourse_idを使用します。

いずれにしても、文字列としてコースに入っても問題はありませんが、特定のコースの更新を行っても、そのコースを持つ各食品アイテムを更新して、コースの追加、編集、削除が可能です。 :)

関連する問題