1. 모든 프로그램은 데이타베이스의 일종이다. or 데이타베이스를 가지고 있다
* 게임이건 워드프로세서이건, 어떤 데이타들을 가지고, 그것을 처리하는 일을 하고 있다
* MVC 구조의 Model, 혹은 Document-View 구조의 Document 가 데이타베이스를 지칭하는 것이다.

2. 데이타베이스가 하는 일은 CRUD (Create, Read, Update, Destroy) 가 기본이다.
* Model 이건 Document 이건 CRUD 에 대한 잘 정의된 인터페이스를 제공하는 것이 기본이다

3. 그중에서도 Select 가 가장 중요하고도 기본적인 Operation 이 될 것이다.
* 상황에 따라 여러가지 다른 Select 가 존재할 것이다
  * 특정 지점에 위치한 Object 를 Select 한다
  * 특정 지점으로부터 반경 r 내에 있는 Object 를 Select 한다
* 여러가지 Filter 를 잘 고안하도록 하자
  * 그중에 아군만 Select 한다
  * 에너지가 25% 이하인 아군만 Select 한다
  * ...
* 각각의 Filter 를 modular 하게 만들어 조합하면 더욱 강력해진다
* Select 패턴에 따라 index 를 고안하고, 내부적 자료구조를 고안한다
  * 3차원 이상의 공간적 index 가 필요한 경우에는 oct-tree 나 quad-tree, bsp-tree 같은 자료가 필요할 것
  * 2차원 적인 공간적 index 가 필요한 경우에는 sector grid 가 효율적일 것

4. 데이터베이스가 갖고 있는 자료는 정규화되어 있어야 한다
* 중복을 줄여라
* 하나의 데이터가 다른 데이타에 의해 연산된 결과라면, 계산된 프로퍼티로 관리되어야 한다
  * ex: 성적 처리 프로그램에서 각 과목별 점수 자료가 있고, 그 점수의 평균점수 자료가 있다면 평균점수라는 자료는 과목별 점수 자료에 의해 연산된 결과이다. 이것이 다른 데이타와 똑같이 관리되어서는 안된다

5. 데이터를 제어하는 컨트롤러는 FSM 으로 명확하게 기술할 수 있다
* 컨트롤러가 어떠한 '상태'에 놓여있는지 구분하라
* 각각의 상태에서 꾸준히 해야 하는 일 (update) 이 무엇인지 규명한다
* 각각의 상태에서 다음 상태로 갈 수 있는 분기조건이 무엇이고, 분기 가능한 상태들이 무엇인지 규명한다

imcgames 의 김학규입니다