我有越来越多的Excel电子表格,没有相同的数据结构。我需要一种机制来使用单个接口查询每个电子表格(DataTables)。基本上,您从下拉列表中选择DataTable,然后执行搜索。
我最初的想法是像这样处理它。
所以说完所有这些,我可以将所有的电子表格存储在SQL中,但现在我对如何构建通用查询机制感到难过。
我觉得我已经把这个变得比需要的复杂得多,我希望有一种更好的方法来处理未知的数据结构。
答案 0 :(得分:1)
SQL(以及一般的RDBMS)根本不能很好地处理未知数据结构。通常,它们违反了关系数据库的所有传统定义。
您正在谈论的具有灵活属性的极其诱人的模式称为EAV(实体 - 属性 - 值)或数据库内的数据库,可以在SQL /数据库中成功使用(如果使用得非常仔细) )但大多数情况下,这只是灾难的一种方法。 StackOverflow上有很多关于EAV的问题。
我成功使用它的情况不是用于临时查询,而是用于我想在实体上进行任意设置的设置,它们的不存在将回退到默认值(并且可能是默认默认值) - 你知道,这就是EAV危险的原因!)然而,通常情况下,应用程序(或存储过程)中有额外的代码可以识别设置,但数据库并不知道。单单这个短语应该为您提供一个线索,说明为什么这不是一个好的(数据库)实践。当我使用它时,有一个压倒一切的架构问题。使用它可以防止数据库管理其数据(尤其是数据类型的弱点),并确保完整性/边界合同,因为它对此知之甚少。通常,我将它与SP / views / UDF配对,以尽可能多地控制数据库。
EAV的近亲属与数据仓库和统计性能有关。在这些情况下,通常有几个维度 - 业务单位,时间,地理区域,总帐分部等,然后是测量代码和测量值(通常为MONEY)。因此,对于特定业务部门等的1/1/2001,您可能会有费用测量,代码为费用代码1,代码2代表收入等。这与EAV有许多相同的缺点,其理由是您可以通过添加行而不是更改架构(在可能有数十亿行的表上)来添加度量。此外,指标可以随时间推移而来,这是一个很好的代表,它可以很好地处理累积等问题。
我会强烈考虑在进行EAV实施之前 - 回到您的需求/用例并查看是否有其他选择 - 甚至分析电子表格(使用Excel对象模型)并构建数据库中的表匹配,然后允许对这些单独的表进行即席查询可能更容易。