2012-01-20 5 views
0

データベーステーブルの文字列をキーとして効率を考えています。私は "CREATE_ADMIN_USER"や "DELETE_NEWS_POST"のような派生クラスにハードコードされたコマンドキーを持っている私のアプリケーションでCommandという抽象クラスを持っています。文字列をテーブルキーとして使用して2つのテーブルに分割する効率性

これらのコマンドを実行できる役割など、データベースに格納したい設定がいくつかあります。より効率的である何

:最初の1の場合

CommandKey  | Role 
-------------------------- 
CREATE_ADMIN_USER | GodUser 
DELETE_NEWS_POST | Admin 
DELETE_NEWS_POST | Editor 

OR

ID| CommandKey 
-------------------------- 
1 | CREATE_ADMIN_USER 
2 | DELETE_NEWS_POST 

ID | Role 
-------------------------- 
1 | GodUser 
2 | Admin 
3 | Editor 

CommandKeyID | RoleId 
--------------------- 
1   | 1 
2   | 2 
2   | 3 

、没落は、コマンドキーの文字列のためのより多くの文字を格納する必要があるということです。これは、コマンドの数が1000を超え、多くのコマンドが複数ある場合は、スペースの問題になる可能性があります。

2番目の欠点は、3つのテーブル間で結合を作成する必要があることです。

2つの間でどちらが優先されるか(実際には好ましい方法がある場合):スペースを増やすか、3つのテーブルを結合します。

+0

2番目の例では、どのようにこれらの2つのテーブルを結合する予定ですか?もう1つの結合テーブル? –

答えて

1

テーブルの主キーの結合は、通常かなり安いです。だから私は、第2の選択肢がほとんどのDBMSでより効率的になると期待していますが、あなたが使用しているDBMSを指定していないので、決定的な答えを出すのは難しいです。

また、私は、2番目の選択肢が何らかの理由ではるかに一般的に使用されていると考えています。また、ロールの名前やコマンドキーの文字列を変更する場合には、第2の選択肢がはるかに管理しやすいと言うことができます。

これらの理由から、私は2番目のオプションをお勧めします。

+0

素晴らしい回答ありがとうございます。 – Chris

関連する問題