2017-07-12 22 views
2

私は3つのテーブルProduct、Color、Categoryを持っています。色とカテゴリテーブルには名前フィールドのみがあります。だから私はテーブルの数を最適化する必要があります。 製品のデータを取得するために、これらのすべてのテーブルからデータを取得する必要があります。それの代わりに、私はただ一つのテーブルのようなものがほしい。だから、すべてがシングルテーブルから取得できます。データベース設計でテーブルを最適化する

要するに、ダイナミック挿入機能と更新機能を使用して商品表の色とカテゴリ名を調整する方法をお探しください。データフォームのProductテーブルを取得するための

Product Table 

product_id | int 
name  | varchar 
description| text 
category | cat_id 
color  | color_id 
size  | size_id 

Color Table 

color_id | int 
color  | varchar 

Category Table 

cat_id  | int 
category | varchar 

色やカテゴリは、製品テーブルのデータを持っているので、私は、JOINを記述する必要があります。クエリ結果をより多くの読み込み時間で結合します。だからテーブルの数を最適化する必要があります。

+1

いくつの色がありますか?カテゴリはいくつですか? – etsa

+0

動的でなければなりません。管理者は挿入できます|アップデート|バックエンドからの削除@ etsa –

+1

あなたのスキーマは妥当性があります。あなたの実際の質問は何ですか? –

答えて

3

あなたの現在の構造は単色とカテゴリで製品情報を保持するのに十分です。現在、テーブル構造を最適化する必要はありません。これは完璧なデータベース構造のように見えます。

毎回ジョインを書くことを避けるために、ビューを作成できます。

+2

の色数とカテゴリが非常に多い場合を除き、商品表(color_idとcat_idを持つもの)でインデックスを作成したほうがパフォーマンスが良いです。 – etsa

0

あなたの構造はかなり普通です。それはサイズと色の製品を扱うことができます。しかし、製品が複数の色と複数のサイズを持っている場合、これは非常に難しいでしょう。

下記のコンフィグレーションスキーマをご覧ください。ステータスフィールドはenable/disableの特定のサイズとカラーに役立ちます。

Product Table 

product_id | int 
name  | varchar 
description| text 
category | cat_id 

Product_color_map 

id   | INT 
product_id | INT 
color_id | INT 
status  | TINYINT 

Product_size_map 

id   | INT 
product_id | INT 
size_id | INT 
status  | TINYINT 

Color Table 

color_id | int 
color  | varchar 

Category Table 

cat_id  | int 
category | varchar 

これがあなたに役立つことを願っています。

+0

これらは最適ではありません:多くのスキーマ。 [_here_](http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table)を参照してください。 –

関連する問題