MSSQL dbo란? 스키마의 개념

SQL Server (MSSQL)에서 테이블을 생성하면 테이블명 앞에 dbo. 라는 명칭이 자동으로 앞에 붙습니다. dbo는 database owner의 약자로 모든 데이터베이스의 기본적으로 포함되는 스키마 이름입니다.

 

dbo 명시

 

dbo란?

스키마는 데이터베이스에서 객체(테이블, 뷰 등)를 구성하고 관리하는 논리적인 컨테이너입니다. 즉, 스키마 밑으로 테이블이 있습니다. 예를 들어, dbo.table은 dbo 스키마 밑으로 만들어진 table이라는 이름의 테이블입니다. dbo 스키마는 SQL Server 데이터베이스에 기본적으로 포함되어 있습니다. 따로 스키마를 명시하지 않고 생성한 테이블은 dbo 스키마 아래에 위치합니다.

 

스키마가 다르면 같은 데이터베이스 내에서도 동일한 이름으로 테이블을 만들 수 있습니다. 예를 들어, dbo.dept라는 테이블이 존재하더라도, test라는 스키마 밑으로 dept라는 테이블을 또 만들 수 있습니다.

 

예시)

CREATE SCHEMA test;

CREATE TABLE test.dept
(
    dept_code NVARCHAR(50) PRIMARY KEY,
    dept_name NVARCHAR(50),
    parent_dept_code NVARCHAR(50)
);

 

다른 스키마 내 같은 이름의 테이블

 

데이터베이스 소유자와 스키마 차이

데이터베이스의 소유자와 스키마는 다릅니다. dbo가 database owner라는 의미를 갖기 때문에 데이터베이스 소유자=스키마 라고 생각할 수 있지만 그렇지는 않습니다. 예를 들어, TEST라는 데이터베이스의 소유자가 test일지라도, table이라는 테이블은 test.table로 참조할 수 없습니다. 테이블명 앞에 붙는 명칭은 스키마 이름입니다.

 

데이터베이스 스키마 목록

 

[스키마].[테이블]로 조회하는 이유

스키마 없이 그냥 테이블명 만으로 조회하면 기본적으로 dbo 스키마로 테이블을 참조합니다. 앞에 스키마를 명시하지 않아도 쿼리는 가능합니다. 체감상 전문적으로(?) 짜여진 쿼리문일수록 테이블 앞에 스키마를 명시하는 경우를 많이 보게 됩니다. 예를 들어, select * from table이 아니라 select * from dbo.table 처럼요.

 

구체적으로 스키마를 명시하면 몇 가지 이점이 있습니다.

 

1. 정보가 명확해집니다.

쿼리문 자체로 어떤 스키마 밑의 어떤 테이블을 조회하는지가 바로 보이기 때문에 명확합니다. 특히 동일한 데이터베이스 내에 여러 스키마를 사용하는 경우 이렇게 사용하는 편이 좋습니다.

 

2. 쿼리 성능이 좋아질 수 있습니다.

스키마를 명시하면 SQL Server는 다른 스키마 경로를 탐색하지 않고 곧바로 명시한 스키마 내에서 객체를 찾을 수 있습니다. 이는 쿼리 성능이 좋아지는 영향을 줍니다. 테이블 용량이 작으면 느낄 수가 없지만 용량이 커질수록 쿼리 최적화가 중요하기 때문에 체감될 수 있는 부분입니다.

 

3. 잠재적인 오류를 방지해 줍니다.

동일 데이터베이스 내에서 다른 스키마의 같은 이름의 테이블이 있는 경우 스키마를 명시하지 않으면 잘못된 쿼리를 날릴 수가 있습니다. 이런 문제를 막아줍니다.

반응형

댓글

Designed by JB FACTORY