我主要是一个应用程序开发人员,但发现自己必须为我当前的项目(btw …它的MS sql Server 2008)做所有的前期数据库工作.作为第一个决定,我试图弄清楚是使用单独的数据库划分我的状态还是在同一个数据库中使用单独的Schema.我已经对sql Server Schema进行了一些阅读,它似乎是分离对象域(我喜欢)的一种自然方式,但我不确定这种模式是否存在隐藏成本.
在这两种方法之间进行选择时,我应该考虑哪些更实际的事情?如果我避免使用dbo.mytable支持myschema.mytable,我会为我的架构创建其他挑战(或问题)吗?
作为旁注……在某些时候,这将被移交给真正的DBA以维持/支持,所以我试图确保我不会让他们的生活更加艰难.
解决方法
我首先要说的是在OO意义上不要将模式视为名称空间或对象域.模式本质上是具有一些附加值的权限容器(见下文)
此外,“单独的模式”或“单独的数据库”是2个不同的概念.需要在事务上和引用一致的数据需要位于同一数据库中.有关更多信息,请参阅One Database or Ten?博文.
在该数据库中,您可能会也可能不会使用模式来组织对象.
就个人而言,我是模式的粉丝,并且总是使用它们,但是用于权限和逻辑分组之类的东西.为此,我会向您推荐以前的问题,您可以看到一般意见支持他们:
> Schema design – best practices?
> What standard should I follow when naming tables and views?
> Over use/correct use of schemas?
对于单独数据库的情况,请参见Aaron’s answer,但这都取决于“事务和引用一致”的要求.