0

関連する db 列間の接続を作成する最良の方法は何だろうと思っています-クエリまたはを使用してIndex? を使用する際の主な関心事Indexはパフォーマンスの速度であることはわかっていますが、それがここでは問題になるとは思いません。

表の各列はさまざまな製品属性を表し、多くの列は他のいくつかの列 (通常は 2 ~ 3 列) に次のいずれかの方法で直接接続されています。

  1. 同じ属性のデータの代替タイプ(つまり、色名 + 表示される 16 進数番号、または画像名 + .png ファイル名 + alt 値)。これらの列の値は同じ情報を表しますが、形式が異なります。したがって、値の間には直接的な相関関係がありますが、値自体は同一ではありません。

  2. 列の値を分類する目的で使用されるサブセット。同じ値が複数の列に存在します (親子関係または兄弟関係のいずれか)。 たとえば、「すべての色」列は、さまざまな色の種類 (つまり、暗い、明るい、明るいなど) を示す 5 つの列に細分され、これらのグループのほとんどはさらに 3 つのカテゴリ (暗さの度合いなどでランク付け) に細分されます。 .)。カラーのネイビーは、「カラーズオール」「ダークカラーズ」「ジュエルトーン」の3列です。

以前は、(外部キーを使用して) テーブル間のリレーションシップを作成することだけを使用Indexしていましたが、これにより、テーブルを接続するステートメントを毎回作成する必要がなくなるようです。

現在、PDO fetch ステートメントで mySql を使用しています (ただし、今後 12 か月以内にデータベースを切り替える可能性があります)。

4

1 に答える 1

1

最初に、クエリとインデックスは互いに代替ではないことを明確にする必要があります。

テーブルが作成されると、列が定義され、これらの列の一部は、別のテーブルの他の列に関連する FOREIGN KEYS として定義できます。テーブル間の関係は、参照整合性の目的でのみ役立ちます (エンジンがサポートしている場合)。これは文書化の目的にも役立ち、一部のクエリ デザイナーはクエリ内の結合を推測するために使用します。

インデックス (またはインデックス) は、別の目的に役立ちます。それらは、サーバーがインデックス付きの列の値に基づいて行の取得を高速化する追加のデータ構造を作成するようにデータベースに指示します。

したがって、FOREIGN KEY はテーブル間の関係を定義し、クエリは関連するテーブルを結合し、インデックスはクエリでの結合、フィルタリング、グループ化、および並べ替え操作を高速化します。

編集:テーブルは、エンティティのタイプを表すために使用されます。したがって、colors(color_name, color_value) という 2 つの属性を持つ色のテーブルを作成できます。Color_value は、16 進文字列または整数表現にすることができます。原則として、rgb(x,y,z) 形式のカラー コードの列はありません。これは常に最初から計算できるためです。

画像のリストを保持する別のテーブルがあります。ただし、色のテーブルと画像のテーブルの間には関係がありません。

編集 2: 2 番目のタイプは通常、2 つのテーブルで表されます。最初のテーブルは典型的な階層関係を格納し、2 番目のテーブルは各色がどのクラスでラベル付けされているかを示します。したがって、提供する例のリレーショナル モデルは次のようになります。

colors(colorid, color_name, color_value)
color_classes(classid, classname, parentid)
colors_classes(colorid, classid)

e.g.,
(colorid, color_name, color_value) - colors
(1,       'Navy',     'xxx')

(classid, classname,    parentid) - color_classes
(1,      'All colors',    0)
(2,      'Dark colors',   1)
(3,      'Light colors',  1)
(4,      'Jewel Tones',   2) -- assuming Jewel Tones is a subdivision of Dark Colors

(colorid, classid) - colors_classes
(1,       4)       -- assuming Jewel Tones is a subdivision of Dark Colors

また、(color_classes のような) 再帰的なリレーションはリレーショナル モデルでは適切に処理されないことに注意してください。

最後に、リレーショナル モデルが実際に問題に最適かどうかはわかりません。データをどのように使用するかによって異なります。

于 2013-04-16T17:37:21.353 に答える