2016-03-30 13 views
0

私は少数のエントリといくつかの小さなテーブルを持っていると私はこれらのテーブルにIDを追加する必要がありますかと思います。私は主にキーが最適なパフォーマンスのために優先されることを他の投稿で読んだことがあります。私はInnoDBテーブルを使用しています。IDが小さいmysqlテーブル

回答が「はい」の場合、小さなテーブル(ステータスとレベル)を構成する最も良い方法は何ですか? IDまたは名前に直接電話するほうがいいですか?

「小さい」表では、3〜10行を意味します。

表ステータス:

column ID, name 
1, Open 
2, Closed 
3, Maintenance 

表レベル:

Column ID, name 
1, easy 
2, medium 
3, hard 

メインテーブル は、それは次のようになります。

Columns ID, name_item, status_item, level_item 
1, name1, 1, 3 
2, name2, 1, 1 
3, name3, 2, 2 

または:

1, name1, Open, hard 
2, name2, Open, easy 
3, name3, Closed, medium 

メインテーブルにIDを入力すると、インターフェイスのステータス/レベルの名前を表示するために2番目のクエリを実行する必要があります。

UPDATE: より良いアプローチは、小さなテーブルで、私のPHPのページ書き込みにIDのみを格納するかもしれないです: $level = 'translated_level'.$info_level->ID; echo $this->lang->line('level');

+1

で達成したい結果を返します

SELECT main.id, main.name_item, status.name, level.name FROM main JOIN status ON status.id = main.id JOIN levels ON level.id = main.id 

? 5行、500? 5000?また、あなたが尋ねていることも正確には不明です**明示的に**あなたの質問 –

+0

を10行以下に記述してください。私は質問 – remyremy

答えて

1

取り扱い状況とレベルを想定すると、multilinguageを簡素化することができたの値は変更されません。これらの列にENUM型を使用し、可能な値を設定すると、2つの他のテーブルを結合する必要がなくなります。

status_itemはENUM('Open', 'Closed', 'Maintenance')

level_itemがENUM('Easy', 'Medium', 'Hard')

+0

を明らかにENUMは2つの大きな欠点があります:1.彼らは独自の非標準の拡張であるため、データとコードはもはや他のデータベースエンジンに移植できません。基本的には、それらを使用してSQL標準に違反します。 2.他のシステムとデータを交換しようとすると、MySQLエコシステム内にいても_Huge_問題が発生する可能性があります。だから一般的に私は個人的に彼らに対抗するよう助言するだろう。 – arkascha

+0

私はmysqlが列挙型をサポートしていることに気付きませんでしたか? –

+0

ENUM列でソートすると、驚くべき結果につながる可能性があります:-) – arkascha

0

はい、あなたのテーブルの各列のIDを持っていなければならないだろうだろう。ほとんどのテーブルはプライマリキーを持つ必要があり、各テーブルはプライマリキーを1つしか持てません。

メインテーブルにIDを保存して、必要なデータを1つのクエリで取得できます。あなたは_small_がどのように小さな

Row ID, name_item, status_item, level_item 
1, name1, Open, hard 
2, name2, Open, easy 
3, name3, Closed, medium 
+0

しかし、2つの結合が必要なので、これは恐ろしいパフォーマンスです。ジョインは、リレーショナル・データ・モデルの一部であり、パフォーマンスに関しては最大の問題です。 – arkascha

関連する問題