【发布时间】:2010-12-11 09:34:13
【问题描述】:
我作为学生工作的网站将在不久的将来重新设计和发布,我被分配了手动搜索数据库中的每个表的任务,该网站用于查找我们可以考虑删除的表。我正在搜索 Dreamweaver 中的每个 HTML 文件源代码,但我希望有一种自动化的方式来检查我的工作。有人对在商业世界中如何做到这一点有任何建议吗?
【问题讨论】:
标签: sql optimization performance database
我作为学生工作的网站将在不久的将来重新设计和发布,我被分配了手动搜索数据库中的每个表的任务,该网站用于查找我们可以考虑删除的表。我正在搜索 Dreamweaver 中的每个 HTML 文件源代码,但我希望有一种自动化的方式来检查我的工作。有人对在商业世界中如何做到这一点有任何建议吗?
【问题讨论】:
标签: sql optimization performance database
如果您搜索代码,您可能会发现从未使用过的 SQL,因为用户从未在应用程序中选择这些选项。
相反,我建议您打开对数据库的审核并记录实际使用的 SQL。例如in Oracle you would do it like this。其他主要的数据库服务器也有类似的功能。
从日志数据中,您不仅可以确定正在使用哪些表,还可以确定它们的使用频率。如果架构中有任何表在一周的审核期间没有出现,或者很少出现,那么您可以使用文本搜索工具在代码中进行调查。
一旦您从数据库中删除候选表并获得经理的批准,那么不要只是删除表,将它们重新创建为空表,或者在表中放置一个大部分为空值的虚拟记录 (或零或空白)在字段中,除了名称和描述性字段,您可以在其中放置诸如“DELETED”“向支持中心报告错误DELE”等内容。这样,应用程序不会因硬错误而失败,并且当用户最终使用这些未使用的表时,您有机会了解他们在做什么。
【讨论】:
对数据库(Visio、Toad 等)进行逆向工程、记录结构并询问新网站的设计人员他们需要什么——然后重构。
【讨论】:
我会先梳理一下关键字的 HTML 源代码:
...使用 grep/等。这些都不是 HTML 实体,并且您不能可靠地使用表名,因为您可能正在处理视图(假设系统中存在任何视图)。然后,您必须将语句本身倾倒以确定正在使用的内容。
如果系统中使用了 [希望] 函数和/或存储过程,则大多数 DB 都具有检查依赖项的参考功能。
现在是逐屏创建设计文档的好时机,列出屏幕上的属性以及值在 table.column 级别的数据库中的来源。
编译您使用的表列表,并与数据库中的实际数据进行比较。
【讨论】:
如果在 HTML 源代码中指定了表名(如果这是唯一指定它们的地方!),您可以在文件中搜索数据库中每个表的名称。如果有很多表,请考虑使用 grep 之类的工具,并为每个表名创建一个针对源代码库(HTML 文件以及可以通过名称引用表的任何其他文件)运行 grep 的脚本。
话虽如此,我还是会听从 Damir 的建议,将删除候选者的列表提交给数据设计人员进行验证。
【讨论】:
我猜您没有围绕数据访问或 UI 进行任何测试,因此无法验证使用和未使用的内容。如果数据访问是一致的,脚本将是您最好的选择。让它搜索正在调用的表/视图/存储过程并将它们转储到文件中以进一步分析。这至少会给你一个从某个地方实际调用的所有内容的列表。至于这些页面是否真的在任何地方使用,那就是另一回事了。
获得被调用的数据库元素列表后,将其与数据库中的用户定义元素列表进行比较。这将为您提供可能被删除的内容。
话虽如此,如果网站正在重新设计,那么新的数据库架构实际上可能是更好的方法。与查找死表和字段相比,重新开始和导入旧数据的工作量通常较小。
【讨论】: