2017-01-09 11 views
0

5種類の注文を処理するデータベースを設計しようとしていますが、すべてのタイプまたは注文のフィールドを持つ1つの大きな注文テーブルがありますが、大きかった。
適切に大きなSQLテーブルを分割する方法

私が気にしていたのは、各注文に一意のID、注文を行った人物のID、注文明細が格納されるorder_typeテーブルのIDです。

ため
ID
USER_ID(USER.idへの外部キー)
ORDER_DATE
order_type2_id(ORDER_TYPE1.idへの外部キー)
order_type3_id(ORDER_TYPE2.idへの外部キー)
order_type4_id( ORDER_TYPE3.idへの外部キー)
order_type5__id(ORDER_TYPE4.idへの外部キー)
order_type6_id(ORDER_TYPE5.idへの外部キー)

order_type1
ID

order_type2
ID

order_type3
ID

order_type4
ID

order_type5
ID

それだけで一つの大きなテーブル内のすべてのデータとにIを使用したりしていますされていないヌルフィールドを格納する方が良いだろう別のテーブルを用意して、何らかの方法で結合することによって、正しいトラックを作成できます。私の解決策が間違っていると感じるので、正しい方向のポイントは素晴らしいでしょう。

+0

あなたは間違ったトラックに、おそらくだ「TABLE1」、「表2」、または「COLUMN1」、「COLUMN2」を書いている任意の時間。各注文がID以上のものでない場合、注文タイプの列挙項目の仕事のように聞こえる。これらの注文をどのように区別しますか?各注文にどのような他のフィールドを関連付けるのですか?どのフィールドは特定の種類の注文にのみ適用されますか? – Schwern

+0

これらの名前はちょうど質問のためのもので、各テーブルは注文に固有の約20〜50の列を持っています。私は注文と呼ばれる1つのテーブルを持っていなければならない場合、5つの異なるタイプの注文があり、そこにはすべての単一のタイプの注文のための列が1つのテーブルの200の列に近いでしょう。私は注文タイプと呼ばれる巨大なテーブルを持っていて、それをすべて保存しましたが、作業しやすくするために、各注文タイプをサブテーブルに分ける方が良いかもしれないと思っていました。 – chris1211

+0

どのような情報が各注文タイプに固有のもので、何が共通しているかということを考えると、私たちはその質問に答えるのに役立ちます。また、各注文タイプが表すもの。 – Schwern

答えて

0

通常、1つのテーブルを持つだけでトランザクションが簡単になる場合があります。これは、通常、ビジネスレイヤー内の1つのオブジェクトに変換されます。何らかの理由ですべての注文を引き出す必要がある場合は、ジョインは必要ありません。変数が可変であればNULLフィールドはスペースを取らないので、固定フィールドはその幅と同じスペースを占めます。

0

これはデータベース設計と正規化の問題です。データベース内のさまざまな注文タイプの目的は何

  • はあなたのような基本的なデータベース設計の質問に答える必要がありますか?

  • 異なる注文タイプにはどのようなデータが含まれていますか?
  • 各注文タイプのデータに構造的な違いがありますか?
  • オーダータイプのデータはどのように使用されますか?
  • オーダータイプは、各オーダーに必須のフィールドですか?
  • など

手オフ、私はあなたのエンド・データベースで必要とされるものの過度に複雑な概念を追いかけているお勧めします。

これを考慮してください... 5つのオーダータイプのデータ構造が同じ場合、実際にはオーダータイプフィールドが1つだけ必要です。

order_table id (primary key BIGINT(10) UNSIGNED NOT NULL AUTO_INCREMENT,) user_id (foreign key to USER.id BIGINT(10) UNSIGNED NOT NULL) order_date (DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',) order_type_id (foreign key to order.type TINYINT(1) UNSIGNED NOT NULL)

ハンドルザは、注文タイプが0で検索順序のIDと順序テーブル0に参加ある

  • 場合、アプリケーション・コードを介して合流
  • 注文タイプ1は、ルックアップして注文テーブル1に結合です
  • 場合オーダーID
  • オーダータイプが2の場合オーダーテーブル2でオーダーテーブルを参照して検索する場合
  • オーダータイプが3の場合オーダーテーブル3でオーダー検索オーダーID
  • 注文タイプ4は検索順序のIDと注文表4に参加している場合は、ここでの鍵は、あなたが正しくデータベース設計を評価するために十分な情報が提供されていないされているが、取り扱いにあなたのテーブルに正規化を適用する方法

あなたの現在のOrderテーブルがあなたのホストのmysql制限を超えている(おそらく、別のホストやVPSホスティングオプションを考えて)

追加の読み取りhttps://www.codeproject.com/articles/359654/important-database-designing-rules-which-i-fo

+0

各注文に固有の50個までの列を持つ5つの注文タイプがあります。私はorder_typeとidカラムを使ってそれをすべて格納した大きなテーブルを持っていました。私は、各注文タイプのサブテーブルを作成することで、作業しやすくすると考えました。 – chris1211

+0

各オーダーに固有の50個の列または各order_typeに固有の50個の列?これらはデータベース設計における2つの非常に異なるものです。 –

関連する問題