# 25강. 데이터베이스 객체
데이터베이스 객체의 종류와 관리하는 방법에 대해서 알아본다.

- 처음 `RDBMS` 소프트웨어를 설치하면 데이터베이스는 비어있는 상태이다.
- 여기에 테이블이나 뷰, 인덱스, 프로시저 등의 데이터베이스 객체를 작성해 데이터베이스를 구축한다.

---

## 1. 데이터베이스 객체
- 데이터베이스 객체란 테이블이나 뷰, 인덱스 등 데이터베이스 내에 정의하는 모든 것을 일컫는 말이다.
- 데이터베이스 내의 객체라는 의미로 `데이터베이스 객체`라고 부르는 것이다(C++이나 자바에서 사용하는 객체지향 프로그래밍의 '객체'와 다르다).
- 객체는 데이터베이스 내에 실체를 가지는 어떤 것을 말한다.
- 객체의 종류에 따라 데이터베이스에 저장되는 내용도 달라진다.
- 테이블의 경우 행과 열이 저장된다.
- 한편 `SELECT`나 `INSERT` 등은 클라이언트에서 객체를 조작하는 SQL 명령인데, 데이터베이스 내에 존재하는 것이 아니므로 객체라 부를 수 없다.
- 객체는 이름을 가지며, 데이터베이스 내에서 객체를 작성할 때는 이름이 겹치지 않도록 해야 한다.
- 객체 이외에도 테이블의 열 또한 이름을 가지며 그 밖에 `SELECT` 명령에서 열에 별명을 붙일 수도 있다.
- 다만 열이나 별명은 객체가 아니다. 한 가지 동일한 점은 이름을 붙일 때 임의의 규칙에 맞게 지정해야 한다는 사실이다.

이름을 붙일 때는 다음과 같은 제약 사항(명명규칙)을 따른다.
- 기존 이름이나 예약어와 중복하지 않는다.
- 숫자로 시작할 수 없다.
- `언더스코어(_)` 이외의 기호는 사용할 수 없다.
- 한글을 사용할 때는 `더블쿼트(MySQL에서는 백쿼트)`로 둘러싼다.
- 시스템이 허용하는 길이를 초과하지 않는다.

- 객체의 이름은 꽤 중요하다. 어떤 데이터가 저장되어 있는지 파악하는 기준이 되는 경우가 많으므로 의미 없는 번호 등으로 이름을 붙이지 않도록 해야 한다.
- 한편 이름은 객체의 종류와는 관계없다는 것에 주의해야 한다.
- 예를 들어 foo라는 이름의 테이블을 한번 만들면, 같은 종류의 테이블은 물론이고 뷰와 같은 다른 종류의 객체 역시 똑같은 이름으로 작성할 수 없다.

##### 의미없는 이름을 붙이지 않도록 한다!

---

## 2. 스키마
- 데이터베이스 객체는 `스키마`라는 그릇 안에 만들어진다.
- 따라서 객체의 이름이 같아도 스키마가 서로 다르면 상관없다.
- 이와 같은 특징 때문에 데이터베이스 객체는 `스키마 객체`라 불리기도 한다.
- 실제로 데이터베이스에 테이블을 작성해서 구축해나가는 작업을 `스키마 설계`라고 부른다.
- 이때 스키마는 SQL 명령의 DDL을 이용하여 정의한다.
- 어떤 것이 스키마가 되는지는 데이터베이스 제품에 따라 달라진다.
- `MySQL`에서는 `CREATE DATABASE` 명령으로 작성한 `데이터베이스`가 스키마가 된다.
- 한편 `Oracle` 등에서는 데이터베이스와 데이터베이스 사용자가 계층적 스키마가 된다.
- 테이블과 스키마는 무엇인가를 담는 그릇 역할을 한다는 점에서 비슷하다.
- 테이블 안에는 열을 정의할 수 있고 스키마 안에는 테이블을 정의할 수 있다.
- 각각의 그릇 안에서는 중복하지 않도록 이름을 지정한다.
- 이처럼 이름이 충돌하지 않도록 기능하는 그릇을 `네임스페이스(namespace)`라고 부르기도 한다.

##### 스키마나 테이블은 네임스페이스이기도 하다!

---