首页 > 解决方案 > Microsoft Dynamics CRM 唯一非聚集索引

问题描述

我在工作中继承了 Dynamics CRM 系统,运行:版本 1612 (8.2.2.112) (DB 8.2.2.112) on-premises

我们处于这样一种情况,重复似乎通过失败的表单提交间歇性地发生,随后重新提交。我们在内部发布了一份文档来解释这种行为,并表达了首先检查部分或全部事务是否真正成功的重要性。但人类终将成为人类,而且常常忘记……

话虽如此,作为一名 DBA,我的第一直觉是创建一个唯一的约束/索引。但是,我不清楚如何在 Dynamics 范围内最好地实现这一点。我对内置的应用程序级重复检测没有信心,备用键对我们不起作用,因为我们的许多独特约束需要包含一DATE两个字段。

据我所知,向 CRM 基表添加索引是受支持的 DML 操作,但表明它会阻止升级。这是否意味着我们将来无法升级?或者只是在升级过程中不会迁移索引?

是否有我缺少的更好的解决方案,它们提供数据库级别的一致性并且不妨碍升级?

标签: dynamics-crmmicrosoft-dynamics

解决方案


使用本地 CRM,您可以添加索引,它没有指定这不会扩展到聚集索引。我非常强烈建议索引 CRM 数据库以提高性能。根据开发人员指南:

对于 Microsoft Dynamics 365 本地部署,根据部署和管理 Microsoft Dynamics CRM 文档中的指南支持添加索引。这适用于所有 Microsoft Dynamics 365 数据库和 Microsoft Dynamics 365 for Outlook 本地数据库。

(我实际上没有在上面提到的文档中看到任何与索引相关的内容)

我不确定您参考了哪些关于不支持这些索引的升级的文档,我从未遇到过使用我索引的数据库升级 CRM 组织的任何困难。但是,升级到与全文索引相关的 v9 显然存在问题: https ://community.dynamics.com/crm/f/117/t/242951

此外,如果您曾经迁移到在线 CRM,那么整个方法将不再有效。

所有 CRM 环境都支持的方法是编写一个同步的操作前插件来检查您的唯一性条件,并引发 InvalidPluginExecutionException。此异常可以包括用户友好的消息,用户在尝试创建副本时将在标准错误弹出窗口中收到该消息。与应用程序违反索引约束时发生的任何事情相比,这保证是更好的体验。

我使用这种方法强制联系电子邮件地址的唯一性,它工作得非常好。我设置了重复检测规则,如果用户忽略重复警告并创建联系人,他们会收到一条消息,指出不允许重复的电子邮件地址。


推荐阅读