php - 为电子表格导入构建一个包含许多列的数据库表;扩展的可能性

标签 php mysql wordpress database-design

一位客户希望能够每月导入相当庞大的数据电子表格(至少在我看来是这样)。目前它由大约 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/

相关文章:

Body 元素上的 HTML5 错误

php - Zend 和 Jquery(Ajax 发布)

php - 如何以兆字节为单位获取 MySQL 表行的大小?

php - Soundcloud 401错误/无效的PHP封装授予

PHP,帮助显示相关表的查询结果

php - 在某些条件下动态更改 WP_Error 消息 CSS?

php - 如何将插入查询从 php-mysql 转换为 php-oracle?

java - 在 JPA MySql 中存储与时区无关的时间的最佳方法

mysql - SQL 根据时间戳按年月排序

wordpress - woocommerce 通过rest api验证用户名和密码