p.c*_*ell 5 sql-server schema sql-server-2005 naming-conventions sql-server-2008
考虑一个数据库服务器,其当前的工作是容纳一个数据库.可能数据库将来会移动到另一个包含多个数据库和模式的数据库实例.
让我们假装app /项目名为Invoicer 2.0.该数据库名为AcmeInvoice.数据库包含所有发票,客户和产品信息.这是演员及其角色和行为的图表.
架构主要用于轻松为角色分配权限.这里的额外好处是对象不在dbo
,并且对象和权限将来可以移植到另一台机器.
题
我认为,如果您的架构名称最终与数据库架构相同,那么您只是在向数据库添加冗余。在数据库中查找具有共同范围或用途的对象,并创建一个架构来反映该范围。例如,如果您有一个发票实体,并且有一些发票状态的支持查找表等,则将它们全部放入发票模式中。
作为一般经验法则,我会尽量避免使用反映应用程序名称、数据库名称或其他具体/物理事物的名称,因为它们可以更改,并找到一个在概念上代表将进入的对象范围的名称。架构。
您的评论指出“架构将主要用于轻松地为角色分配权限”。您的图表显示了可以访问某些/所有表或某些/所有存储过程的特定用户类型。我认为尝试从概念上将对象组织到模式中以及从安全角度将它们组织到模式中是相互冲突的事情。我赞成在 sql server 中创建角色来反映用户的类型,并授予这些角色对每个用户类型所需的特定对象的访问权限,而不是授予角色或用户访问模式来构建安全框架。