我们都知道Drupal并不真正支持数据库中外键的概念,而且可能永远不会1。
我们也知道,模块可能无法正确执行操作,或者用户会定期执行疯狂的操作,例如
DELETE FROM node_revision
WHERE vid = 123
为了“保持数据库整洁”。发生这种情况时,挂钩不会运行,并且数据库中存在孤立数据。通常,这些数据是无害的,但有时会引起真正的怪异行为,并可能导致代码错误。
有什么不错的方法可以检测数据库中是否有失效和/或不一致的数据?
1 Drupal 7 Schema API 支持它们提供文档,但不支持实施。
我假设您的意思是“ Drupal内部有任何体面的方法”?还是您愿意接受外部工具?
—
iconoclast 2012年
理想情况下,在Drupal内部,但我愿意接受任何东西。我开始对Drupal工具进行纸上规划,但不知道它会走多远。
—
mpdonadio
可以将问题简化为一组SQL查询来查找此类数据吗?如果您不是使用漂亮的Drupal UI来构建任何易于使用的工具,而是坐在手动发出查询的MySQL客户端上,您将如何发现这种不一致之处?
—
iconoclast 2012年
查询并不是真正的问题。更了解要查询的表以及要联接的键。我的书面想法是使用Schema API来获取所有表,然后尝试从每个模式中找出是否可以构建查询。这可能对我来说是一个假期项目。
—
mpdonadio
顺便说一句,看起来终于在D8中提供了一些FK支持:drupal.org/node/911352
—
Nic