ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-DBMS独立查询

2019-12-08 18:15:08  阅读:319  来源: 互联网

标签:postgresql sql c mysql sql-server


我的硕士论文是关于通过分析元数据和存储的数据来发现不良的数据库设计.为此,我们从给定的DBMS中提取元数据模型,然后对该元数据运行一组规则.

为了通过数据分析扩展此过程,我们需要允许规则直接查询数据库,但是我们必须保持DBMS独立性,以便可以将查询应用于PostgreSQL,MSSQL和MySQL.

我们讨论了一种查询的功能构造,例如:

new Query(new Select(columnID), new From(tableID), new Where(new Equality(columnID1, columnID2)))

然后使用特定于DBMS的序列化器.

另一种方法是让规则自己处理一切:

public Query QueryDatabase(DBMS dbms)
{
 if (dbms == PostgreSQL) { return "select count(1) from Users"}
 if (dbms == MSSQL) {return ....}
}

我们错过了什么吗?所有这些实际上是否存在于某个地方的漂亮库中?是的,我们已经研究了实体框架,但是它们似乎依赖于数据库的静态类型模型,由于明显的原因,该模型无法创建.

我应该提到的是,我们维护了可扩展的规则体系结构,允许最终用户实施自己的规则.

为了阐明我们要实现的目标,请看下面的查询(mssql),它需要两个参数,表名(@table)和列名(@column):

DECLARE @TotalCount FLOAT;
SELECT @TotalCount = COUNT(1) FROM [@table];
SELECT SUM(pcount * LOG10(@TotalCount / pcount)) / (LOG10(2) * @TotalCount)  
FROM (SELECT (Count([@column])) as pcount 
      FROM [@table]
      GROUP BY [@column])  as exp1 

该查询通过估计熵来度量存储在给定属性中的信息量.它需要访问表中的所有行.为避免从数据库中提取所有行并通过慢速网络连接进行传输,最好用SQL表示它们,而仅传输单个数字.

注意:我们确实拥有所需的所有元数据.这个问题仅用于访问数据!

我不确定是否要将此问题添加到我已经很长的问题中,编辑现有答案或要做什么.请随时提出建议.

标签:postgresql,sql,c,mysql,sql-server
来源: https://codeday.me/bug/20191208/2093366.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有