Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 变量数据源的查询引擎。C_C#_Sql Server_Excel_Data Structures - Fatal编程技术网

C# 变量数据源的查询引擎。C

C# 变量数据源的查询引擎。C,c#,sql-server,excel,data-structures,C#,Sql Server,Excel,Data Structures,我有越来越多的Excel电子表格,没有一个具有相同的数据结构。我需要一种机制来使用单个接口查询这些电子表格数据表。因此,本质上,您可以从dropdownlist中选择DataTable,然后执行搜索 我最初的想法是这样处理 在SQL中创建通用数据结构。这将由四个表组成。1研究2研究属性3研究属性类型数据类型和4研究数据的静态列表。 第一步是确定一项研究。这意味着您在研究表中创建一个条目,为其提供名称和描述。加入此选项后,您将为Excel电子表格中的每个相应字段创建StudyProperty记录,

我有越来越多的Excel电子表格,没有一个具有相同的数据结构。我需要一种机制来使用单个接口查询这些电子表格数据表。因此,本质上,您可以从dropdownlist中选择DataTable,然后执行搜索

我最初的想法是这样处理

在SQL中创建通用数据结构。这将由四个表组成。1研究2研究属性3研究属性类型数据类型和4研究数据的静态列表。 第一步是确定一项研究。这意味着您在研究表中创建一个条目,为其提供名称和描述。加入此选项后,您将为Excel电子表格中的每个相应字段创建StudyProperty记录,并选择适当的StudyProperty类型。 因此,如果您有一个包含两列名称和出生日期的电子表格,您将得到一条研究记录,两条StudyProperty记录的名称为StudyPropertyType=string,出生日期为StudyPropertyType=DateTime 定义研究后,我可以将数据从Excel电子表格导入StudyData表。 StudyData表为每个可能的数据类型都有一个Id和一列。根据研究定义,导入的数据将根据数据类型存储在研究表的相应字段中。因此,出生日期将存储在研究表的ValueDateTime字段中。 所以说了这么多,我可以把所有的电子表格都存储在SQL中,但是现在我被如何构建一个通用的查询机制难住了


我觉得这比需要的复杂得多,我希望有更好的方法来处理未知的数据结构

SQL和RDBMS通常不能很好地处理未知的数据结构。通常,它们违反了关系数据库的所有传统定义

您正在谈论的具有灵活属性的非常诱人的模式被称为EAV Entity Attribute Value或database-in-a-database,如果非常小心地使用,可以成功地在SQL/数据库中使用,但大多数情况下只是导致灾难。在StackOverflow上有很多关于EAV的问题

我成功使用它的情况不是用于临时查询,而是用于设置,我希望在实体上有任意设置,它们的不存在将返回到默认值,可能是默认值-你看,这就是为什么EAV是危险的!但是,通常,应用程序或存储过程中会有额外的代码知道设置,但数据库不知道。这句话本身就应该给你一个线索,说明为什么这不是一个好的数据库实践。当我使用它时,有一个压倒一切的架构问题。使用它会使数据库无法管理其数据,尤其是数据类型和确保完整性/周界契约是一个弱点,因为它对它知之甚少。因此,通常,我会将它与SPs/views/udf配对,以便尽可能多地控制数据库

EAV与数据仓库和统计性能密切相关。在这些情况下,通常有几个维度-业务单位、时间、地理区域、总账部门等,然后是度量代码和度量值(通常是货币)。因此,对于2001年1月1日的某个特定业务部门等,您可能会有一个费用度量,费用的代码为1,收入的代码为2,这与EAV有许多相同的缺点,理由是您可以通过添加行来添加度量,而不是更改可能有数十亿行的表上的模式。此外,指标可以随时间变化,这是一个很好的表示,它可以很好地处理汇总等


我会在进行EAV实现之前仔细考虑——回到您的需求/用例中,看看是否有替代方案——甚至使用Excel对象模型分析电子表格并在数据库中构建表来匹配,然后允许对这些单独表的临时查询更容易。

谢谢。非常感谢我们的详细解释。我想我可能会同意你的建议,创建数据库表以匹配导入的电子表格。