我正在开发一个工具,我在表等前面加上“dbo”,现在我收到了对自定义模式名称的请求。我正在考虑跳过它们,而是让用户通过对 Db 的关联登录来控制它。我知道有关于“性能”的讨论,因为它需要搜索用户的方案,然后回退到 dbo 等,但这真的是个问题吗?意见?
1 回答
首先,我会将这个问题视为您的客户(用户?)的功能请求。因此,要立即做出的决定是,您现在是否应该考虑考虑这一点,或者您是否还有其他显然更重要并为客户带来更多利益的功能请求?
例如,现在您可以简单地告诉客户您的应用程序需要自己的数据库,该数据库不应与其他应用程序共享或由客户以任何方式操作。然后您不必担心模式或两个模式中的相同对象名称,因为您的应用程序“拥有”数据库。也许情况已经如此,但如果是这样,那么我不明白为什么您的客户关心您的对象在哪个模式中。
其次,假设您确实决定开展这项工作,您应该收集一些关于人们为什么要求这样做的信息,以确保您清楚地了解他们希望您提供什么以及对他们有什么好处。如果客户真的说“您的应用程序运行缓慢”,那么模式的选择不太可能是原因,索引、模式设计或您的应用程序代码更有可能是要查看的领域。
最后,如果您仍想继续前进,则需要找到技术解决方案。这部分是部署问题,部分是编码问题。这是一个部署问题,因为您必须在安装时指定的特定模式中部署数据库对象,并且您的所有补丁和更高版本也需要意识到这一点。编码问题是你需要你的数据库代码是“模式感知的”,以防你最终处于你拥有的情况dbo.TableName
,MyTool.TableName
并且OtherSchema.TableName
都在同一个数据库中。解决方案显然是在所有代码中引用模式名称,无论如何这被认为是重要的最佳实践。但具体如何做到这一点取决于您如何构建应用程序,如果您使用 ORM 等。