Transact SQL,带有架构的前缀与否?

时间:2012-05-22 15:24:42

标签: sql-server sql-server-2008 tsql

我正在开发一个工具,我已经使用“dbo”为表格等添加前缀,现在我收到了自定义模式名称的请求。我正在考虑跳过它们,而是让用户通过与Db相关联的登录来控制它。我知道有关于“性能”的讨论,因为它需要搜索用户的方案,然后再回到dbo等,但这真的是一个问题吗?意见?

1 个答案:

答案 0 :(得分:1)

首先,我会将此问题视为客户(用户?)的功能请求。所以立即做出的决定是,如果您现在考虑调查此问题,或者您是否有其他明显更重要的功能请求并为客户带来更多好处?

例如,现在您可以简单地告诉客户您的应用程序需要自己的数据库,该数据库不应与其他应用程序共享或由客户以任何方式操纵。然后,您不必担心两个模式中的模式或相同的对象名称,因为您的应用程序“拥有”数据库。也许情况已经如此,但如果是这样,那么我不明白为什么您的客户关心您的对象所在的架构。

其次,假设您决定使用它,您应该收集一些有关人们为什么要求这样做的信息,以确保您清楚地了解他们希望您提供的内容以及对他们有什么好处。如果客户真的说“你的应用程序运行缓慢”,那么模式的选择不太可能是原因,那么索引,模式设计或应用程序代码是可能需要考虑的领域。

最后,如果您仍想继续,您需要找到技术解决方案。这部分是部署问题,部分是编码问题。这是一个部署问题,因为您必须在安装时指定的特定架构中部署数据库对象,并且所有补丁和更高版本也需要了解这一点。编码问题是您需要将数据库代码设置为“架构感知”,以防您最终遇到dbo.TableNameMyTool.TableNameOtherSchema.TableName的情况数据库。显然,解决方案是在所有代码中引用模式名称,无论如何都将其视为important best practice。但是,如果您使用ORM等,具体如何执行此操作取决于您的应用程序结构。