データベース テーブル定義では、行ではなく列を宣言します。何をモデル化し、このテーブルをどのように使用するかに応じて、これらのアプローチのいずれかをお勧めします。
適切に正規化されたアプローチは、次のようになります。
mytable(unique_id, entity_label, value_label, column_value, [other entity attributes e.g. date_added])
いくつかのデコード: entity_label
Excel の列 A にvalue_label
あるもの、Excel の行 1 にあるものです。この方法で保存されたデータは次のようになります。
unique_id entity_label value_label column_value
1 row_1 col_1 9
2 row_1 col_2 19
3 row_1 col_3 29
4 row_2 col_1 50
等々。
column_value
これは、データベース行ごとに1 つの値 ( ) のみを格納する、柔軟で拡張可能なアプローチです。たとえば、entity_label
とvalue_label
は各データベース行で識別されるため、任意の数のvalue_labels
エンティティ (Excel "col_nn") および全体のデータ ポイントを簡単に処理できます。column_values
すべてを合計するのは簡単なことentity_label
です (Excel の列 E で行っているように)。エンティティまたはエンティティ内の特定の値の削除、追加、および更新はすべて可能で簡単です。
一方、エンティティ モデルには、エンティティごとに常に 3 つの値がある可能性があります。ソース データを提示したのと同じように、このアプローチを模倣したテーブル定義は次のようになります。
mytable(unique_id, entity_label, column_value_1, column_value_2, column_value_3, [other entity attributes e.g. date_added])
このアプローチの主な欠点は、柔軟性の欠如です。たとえば、value_labels
エンティティごとの数が変更された場合 (たとえば、3 から 4 に増加)、エンティティの新しい列を考慮に入れるためだけに多くのコードを編集しなければならないことに気付くかもしれません。
私が繰り返すのが好きなマントラは、「行は安く、列は高くつく」です。データベース テーブルを設計するときは、この点に留意してください。