0

次のようなExcelテーブルのデータを保存できるデータベーステーブルの正しい構造を見つけるのを手伝ってください:

ここに画像の説明を入力

最初に、行と列のヘッダーをテーブルに保存しようとしました:

rows(id_row, label)
columns(id_col, label)

次に、次のような値を格納するためのテーブルを作成しました。

mytable(id_tbl, #id_row, #id_col, value, date_add)

しかし、このソリューションでは、選択と操作 (削除、編集) にさらに処理が必要であり、コードのパフォーマンスに影響を与える可能性があることに気付きました

行が固定されているので、次のようにすることにしました。

columns(id_col,label)
mytable(id_tbl, id_col, date_add, row_1, row_2, row_3)

私のExcelテーブルのインスタンスを保存するには、列ごとにmytableテーブルに1行が必要です

それで、これは正しい方法ですか?

4

1 に答える 1

2

データベース テーブル定義では、行ではなく列を宣言します。何をモデル化し、このテーブルをどのように使用するかに応じて、これらのアプローチのいずれかをお勧めします。

適切に正規化されたアプローチは、次のようになります。

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_labelvalue_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 に増加)、エンティティの新しい列を考慮に入れるためだけに多くのコードを編集しなければならないことに気付くかもしれません。

私が繰り返すのが好きなマントラは、「行は安く、列は高くつく」です。データベース テーブルを設計するときは、この点に留意してください。

于 2012-08-09T23:29:49.730 に答える