データベース テーブル定義では、行ではなく列を宣言します。何をモデル化し、このテーブルをどのように使用するかに応じて、これらのアプローチのいずれかをお勧めします。
適切に正規化されたアプローチは、次のようになります。
mytable(unique_id, entity_label, value_label, column_value, [other entity attributes e.g. date_added])
いくつかのデコード: entity_labelExcel の列 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 に増加)、エンティティの新しい列を考慮に入れるためだけに多くのコードを編集しなければならないことに気付くかもしれません。
私が繰り返すのが好きなマントラは、「行は安く、列は高くつく」です。データベース テーブルを設計するときは、この点に留意してください。