サーバーで一種のフォーラム変更コードを実行しています。私のデータベースには という巨大なテーブルがcoreあり、基本的に管理者が編集可能なすべての設定が含まれています。私の質問は、これを正規化する必要がありますか?
このテーブルの大きさを示すフィドルを作成しました: http://sqlfiddle.com/#!2/f4536/1
gear_notifications、などの列が表示されます。これらはgear_bank、gear_*特定のシステムがオンになっているかどうかを示します。たとえば、 の場合gear_bank=1、銀行システムがオンになっています。現時点では__construct、DB ファイルで次のクエリを実行します。
$settings = mysql_query("SELECT GROUP_CONCAT(d.domain) AS domains, GROUP_CONCAT(d.zb) AS zb_info, c.* FROM core c JOIN domains d ON d.cid = c.id WHERE c.id ='$cid' LIMIT 1");
無視するJOINと、ここで問題がすぐにわかります。coreクエリは、対応するシステムがオンになっているかどうかに関係なく、テーブルからすべてのフィールドを返します。たとえば、 if gear_bank=0、クエリは引き続き 、 などを返しますbank_name。これによりbank_history_perpage、bank_*コードの実行方法に物理的な問題は発生しませんが (必要のないデータは無視できるため)、そのデータをロードする必要はありません。
coreすべての値を持つと呼ばれる 1 つのテーブルを作成してから、対応する値に対応するテーブル ( など) を作成したほうがよいでしょうgear_*か?core_bankcore_*
私はしばらくの間これを照会してきました (悪いしゃれ、申し訳ありません!)、これが私のコードのパフォーマンスを向上させるかどうかを判断するのに十分な知識がありません。上記のクエリはすべてのページで実行されることに注意してください。
新しいシステム、つまり複数のテーブルに戻す場合、必要な情報をすべて取得するにはどうすればよいでしょうか? coreオンになっているシステムを特定するために1 つのクエリを実行してから、対応するすべてのテーブルに対して追加のクエリを実行したくありません。inJOINの値に基づいて必要なすべてのテーブルを sとする1 つのクエリが望ましいと思います。それは可能でしょうか?gear_*core
私はまだこのフォーラムの修正をリリースしていないので、実際に影響を与えずに好きなだけ変更を加えることができます:)。