我的硕士论文是关于通过分析元数据和存储的数据来发现不良的数据库设计.为此,我们从给定的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表示它们,而仅传输单个数字.
注意:我们确实拥有所需的所有元数据.这个问题仅用于访问数据!
我不确定是否要将此问题添加到我已经很长的问题中,编辑现有答案或要做什么.请随时提出建议.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。