从MySQL转SQL Server时三部分表名中间层级含义咨询
SQL Server 三部分命名的结构说明
你提到的[Application]中间段官方名称为架构(Schema),是SQL Server和MySQL对象命名体系的核心差异点:
- SQL Server 的数据库对象完整四部分命名规则为:
[服务器实例名].[数据库名].[架构名].[对象名]
你给出的示例[WideWorldImporters].[Application].[Cities]省略了服务器实例名,三部分对应含义为:
[WideWorldImporters]:数据库名,等价于MySQL里的Schema概念[Application]:架构名,是数据库内部的逻辑分组容器[Cities]:表对象名
- 你熟悉的MySQL两层命名格式
[schema].[tablename]在SQL Server中无法执行的原因,是MySQL的SCHEMA和DATABASE是完全等价的同义词,没有「数据库内独立架构」这一层级设计,SQL Server缺失架构名的情况下无法定位到具体的表对象。
架构的核心作用
- 权限批量管理:可以直接给用户/角色授予整个架构的读写、查询权限,不需要逐张表配置权限,比如给客服团队仅开放
[Application]架构的查询权限即可 - 业务逻辑分组:同业务域的表可以归类到同一个架构下方便维护,WideWorldImporters 示例库就拆分了
Application、Sales、Purchasing、Warehouse等多个架构对应不同业务模块 - 避免命名冲突:不同架构下可以存在同名表,比如
[Sales].[Order]和[Purchasing].[Order]可同时存在互不影响
如果需要简化查询写法,可以给当前登录的数据库用户设置默认架构,设置后不需要每次查询都显式写架构名也能正常定位表对象。
内容的提问来源于stack exchange,提问作者Jamie McManus
相关产品推荐
相关产品推荐

