build模一个Excel表格(dynamic列和固定行)

请帮助我find一个数据库表的正确结构,允许存储一个如下所示的Excel表的数据:

在这里输入图像说明

首先我试图在表格中存储行和列标题:

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

然后我创build了一个表来存储这样的值:

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

但是我意识到这个解决scheme需要更多的处理来select和操作(删除,编辑),也许会影响我的代码的性能

因为我有一个固定的行,我决定这样做:

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

所以为了存储我的excel表的一个实例,我将需要每列的mytable表中的1行

那么这是正确的做法吗?

数据库表定义声明它的列,而不是行。 根据你正在build模和你将如何使用这个表,我会build议这些方法之一。

一个正常化的方法是这样的:

 mytable(unique_id, entity_label, value_label, column_value, [other entity attributes eg date_added]) 

一些解码: entity_label是你在Excel列A中所拥有的, value_label是你在Excel Row 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 ),并且是一种灵活且可扩展的方法。 例如,由于每个数据库行都标识了entity_labelvalue_label ,因此它将毫不费力地为每个实体(Excel“col_nn”)和整个数据点处理任意数量的value_labels 。 总结一个entity_label所有column_values是很简单的事情(就像你在Excel E列表中做的那样)。 删除,添加和更新实体中的实体或特定值都是可能且简单的。

另一方面,您的实体模型可能每个实体都有三个值。 就像您提交源数据一样,模拟此方法的表定义可能是这样的:

 mytable(unique_id, entity_label, column_value_1, column_value_2, column_value_3, [other entity attributes eg date_added]) 

这种方法的主要缺点是缺乏灵活性。 例如,如果每个实体的value_labels的数量发生了变化(比如从3增加到4),那么您可能会发现自己正在编辑大量的代码,以考虑实体的新列。

我想重复的一句咒语是“行很便宜,列很贵”。 在devise数据库表时请记住这一点。