📌 테이블 생성 시 dbo의 의미
https://pyoungt.tistory.com/22
📌 스키마란?
스키마(Schema)는 데이터 베이스 개체에 대한 네임스페이스(NameSpce)이다.
다시말해, 데이터베이스의 구조와 제약조건에 관한 전반적인 명세를 기술한 것을 말한다.
개체의 특성을 나타내는 속성(Attribute),
속성들의 집합으로 이루어진 개체(Entity),
개체 사이에 존재하는 관계(Relation)에 대한
정의와 유지해야 할 제약조건을 기술한 것이 바로 스키마이다.
즉, 데이터베이스 내에서 어떤 구조로 데이터가 저장되는 지를
나타내는 데이터베이스 구조를 스키마라고 칭한다.
하지만 SQL 서버에서 스키마는 조금 다른 의미를 가지게 된다.
스키마는 데이터베이스 개체가 갖는 "고유한 이름"을 결정지어주는 역할을 한다.
데이터베이스 안에서 고유해야하기에 데이터베이스의 모든 개체는 다음과 같은 고유한 이름을 가지게 된다.
Server.Database.Schema.Object
SQL 서버 2000에서는 Server.Database.Owner.Oject 와 같은 형식의 이름으로 결정되었으나,
SQL 서버 2005에서는 개체의 소유자(Owner)가 아닌 스키마(Schema)를 사용하여
개체의 이름에서 소유자 부분을 분리 시켰다. (Server.Database.Schema.Object)
소유자 부분을 분리시킴으로써 얻는 이점으로는
1. 개체의 소유자와는 상관없이 스키마를 이용하여 개체를 그룹화하여 관리에 효율을 꾀할 수 있다. 2. 권한 관리의 경우 개체 개별적으로 권한을 이용하지 않고 스키마에 권한을 허용하면 스키마에 포함된 모든 개체에 대해 자동적으로 권한을 줄 수 있기에 권한 관리가 효율적이다. 3. 소유자 계정을 삭제하기 위해 소유자가 소유한 개체의 소유자를 변경하거나 개체를 삭제할 필요가 없어진다. (SQL 서버 2000에서는 개체를 소유한 소유자의 계정을 삭제 할 수가 없었다) |
📌 dbo 스키마
dbo 스키마는 모든 데이터베이스에 포함되어 있는 특수한 스키마다.
데이터베이스의 사용자 계정은 기본 스키마를 갖게 되는데,
이 사용자가 테이블을 만들면 그 테이블은 사용자의 기본 스키마에 포함되게 된다.
예로들어 기본 스키마가 Boss인 사용자 계정이
member 테이블을 만들게 되면, Boss.member와 같은 이름을 갖게 되는 것이다.
dbo 스키마는 별도의 기본 스키마가 지정되지 않은 사용자 계정의 기본 스키마가 된다.
만약에 기본 스키마가 별도로 지정되지 않은 사용자 계정이 Department라는 테이블을 만들면
그 테이블은 dbo.Department라는 이름을 갖게된다.
📌 스키마 만들기
스키마는 SSMS(SQL Server Management Studio) 또는 Create Schema 구문을 이용하여 만들 수 있다.
USE Test -- Test라는 데이터베이스를 사용한다.
GO
CREATE SCHEMA Boss -- Boss 라는 스키마를 생성한다.
GO
만약 Test 데이터베이스에 Emma 라는 사용자 계정이 있다고 가정한다면,
다음과 같이 Emma의 기본 스키마를 Boss로 지정할 수 있다.
USE Test -- Test라는 데이터 베이스를 사용한다
GO
ALTER USER Emma WITH DEFAULT_SCHEMA = Boss -- Emma라는 사용자계정의 기본 스키마를 Boss로 변경한다
GO
📌 스키마 삭제하기
스키마는 SSMS(SQL Server Management Studio) 또는 DROP Schema 구문을 이용하여 삭제할 수 있다.
USE Test -- Test라는 데이터베이스를 사용한다.
GO
DROP SCHEMA Boss -- Boss라는 스키마를 삭제한다.
GO
📌 개체 이름 확인
사용자의 기본 스키마에 속한 개체나 dbo 스키마에 속한 개체는 스키마를 생략해도 개체를 찾을 수 있다.
하지만, 그 외의 스키마에 속한 개체를 찾기 위해서는
개체 이름 앞에 해당 스키마를 정확히 포함시켜주어야 한다.
그렇기에,
가장 좋은 방법은 개체 이름 앞에 항상 스키마를 포함시키는 습관을 갖는 것이다.
'DataBase > MSSQL' 카테고리의 다른 글
[MSSQL] 기본키 (PRIMARY KEY), 인덱스(INDEX), 클러스터(CLUSTERED) (0) | 2022.09.28 |
---|---|
[MSSQL] 프로시저 기초 (0) | 2022.09.23 |