一位客户希望能够每月导入相当庞大的数据电子表格(至少在我看来是这样)。目前它由大约 200 行和 41 列组成。
前两列是标识符(位置的 ID 和人类可读的名称);接下来的 39 列都是数值。这些数字实际上是分为 39 个类别的“评级”——但是客户刚刚暗示他们可能希望在未来扩展这些类别。
我最初的想法是创建一个模仿电子表格的数据库结构(因此,本质上是 41 列)——但是由于客户可能希望稍后添加到它,我不知道这是否是最好的方法来解决这个问题。
我不是受过经典训练的编码员;我只是根据需要选择了一些东西,所以解决方案越简单越好。我考虑过或许在每个位置的基础上序列化一个关联数组:
----------------------------------------------------------
ID Name Data Date
----------------------------------------------------------
1 Newport {niceness:1, staff:6.5, etc.} Mar 13
2 Stobart {niceness:7, staff:3.1, etc.} Mar 13
----------------------------------------------------------
...但我不知道这是否是最好的方法,或者它是否一定会按照我设想的方式工作。这个想法是,如果 March '13 只有 39 个类别,但 July '13 有 42 个类别,那么数据库结构不会受到影响;只是存储了一个不同的关联数组。
这种事情也可能(?)消除导入表时出现列不匹配错误的可能性 - 例如,如果他们突然决定在没有警告的情况下删除类别,然后尝试导入一个列短的电子表格。
注意事项:
我正在开发这是一个 Wordpress 插件,所以数据库表结构写在那里并且更新起来相当简单,感谢 WP 的 dbDelta功能。
我也希望使用 Matt Kruse 的 PHP ExcelReader ,在我最初的测试中似乎非常出色。
最佳答案
我会将表拆分为名称、类别 和一个名为 *names_categories*(或类似名称)的链接表
表名
----------------------------------------------------------
ID Name Date
----------------------------------------------------------
1 Newport Mar 13
2 Stobart Mar 13
表格类别
----------------------------------------------------------
ID Category
----------------------------------------------------------
1 niceness
2 staff
表名_类别(链接表)
----------------------------------------------------------
id_name id_category value
----------------------------------------------------------
1 1 1
1 2 6.5
2 1 7
2 2 3.1
这会给您更大的灵 active 。即使您的解决方案有效,它也不是那么灵活,并且将来可能很难维护数据库。
关于php - 为电子表格导入构建一个包含许多列的数据库表;扩展的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15933911/