【问题标题】:Best way to analyse and check all database data分析和检查所有数据库数据的最佳方法
【发布时间】:2014-06-26 05:39:15
【问题描述】:

我们的一位客户想要检查每个表中的每个数据库记录。 问题是,我们的数据库目前有几十张表(50多张),每张表已经有上千条记录了。

我们的客户想要做的基本检查是检查每个表的哪些列具有空值。我们的客户假设如果平台用户只填写基本输入,这可能意味着用户没有充分利用平台中的可用输入。

满足此要求的最佳方法是什么?

我已经考虑过在统计上这样做:

  • Table1 有 30 条记录,其中包含以下空列(Column1、Column2、Column3)
  • 30 % 的数据库表有空值记录

【问题讨论】:

  • SQL Server? MySq?甲骨文?我知道我会如何为 SQL Server 做这件事,但这可能不适用于其他数据库。我首先查询架构表以查找可以包含空值的列(使用这样的查询:mssqltips.com/sqlservertip/1781/…),然后为这些列动态构建查询,返回计数。
  • 感谢 David 的回复,是一个 SQL Server 2008 R2 数据库。所以在某种程度上你会检索聚合数据吗?
  • 客套话建议:对于允许空值的每一列,尝试使用 ALTER TABLE 来禁止空值。如果失败,则表中该列中存在空值。如果成功,则该列中没有空值(将来也不会有空值)。
  • 是的。我会编写一个应用程序,首先查询查找现在可以包含的列,然后对于找到的每一列,创建一个查询,如 Select Count(*) From [Table] WHERE [column] IS NULL,并记录表。计数> 0的列。但是,这可能不是最有效的方法,所以我在等待更聪明的人回答。
  • 你知道,@JonathanLeffler,如果我知道我不应该有空值并且正在执行清理,那实际上我会这样做。我会先在数据库的测试版本上做,但这将是最简单的 IMO。

标签: sql for-loop sql-server-2008-r2 null


【解决方案1】:

我知道这并没有真正回答您提出的问题,但我认为仅检查“null”是要求的开始,但不太可能是结束。

在我使用大量数据完成的大多数项目中,我们最终构建了一个验证框架,其中包含每个表的业务逻辑以及每个表中的每个字段。

例如,我们发现很多记录都包含虚假的电子邮件地址,因此我们编写了一个脚本来验证它们(最初很简单,检查域是否存在,并且不是“test.com”之一,“ aaa.com”、“qwerty.com”等)。我们还意识到我们收到了伪造的电话号码,因此我们检查了电话号码是否与明显虚构的电话号码相匹配 (123-456789)。

这是一个痛苦的背后,但如果企业想要了解数据的质量,这是唯一的方法。

我们最终编写了几十个小 SQL 脚本,每个脚本都吐出一个“可疑”记录列表,以及怀疑它们的原因。它并不漂亮,但它易于扩展、易于运行,并为企业提供了足够的信息来做出决策。

【讨论】:

  • 你真的猜到了 :) 今天我们和客户开了个会,他最终想要的是一个规则系统来检查表格,这样他就可以为每个表格制定几个规则,比如防火墙,如果每张表上的记录不符合规则中规定的要求,我们显示“无效”记录。你的想法也不错。我会等着看我是否能得到更多关于这个问题的想法。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多