본문 바로가기

SQL Server/ER Studio

ER Studio 사용하기

회사에서 ER/Studio와 관련한 tech talk을 진행 하면서 작성했던 내용이다.

1. 환경 설정 (SQL 2005 기준)
Tools > Options를 선택하고 아래와 같이 설정한다.
물론 회사마다 개인마다 차이가 있으니 아래 설정이 꼭 바람직하다고 할 수는 없다.

- Entity 이름의 최대 길이 = 128자 (SQL서버의 sysname타입은 nvarchar(128)이기 때문)
- Entity에 Attribute를 추가했을 때 기본 적용할 데이터 타입은 integer로 한다.
- NULL은 허용하지 않는 것을 기본으로...

ER/Studio Capture

- 데이터 타입과 NULL허용여부는 Logical탭과 동일
- 기본 데이터 베이스를 SQL 2005로 선택
ER/Studio Capture

- 이부분은 사람마다 편하게 느끼는게 다를 듯... 모르면 아래처럼 쓰자.
ER/Studio Capture

- 화면에 ERD를 표시하는 옵션이다. 보통 잘 정의하지 않는 Relationship의 동사구는 빼고... Domain과 NULL여부, AK(대리키)를 표시하도록 설정한다.
ER/Studio Capture

- ISQL Path 부분에 SQL Server Management Studio 실행파일의 경로를 적는다.
ER/Studio Capture

ER/Studio Capture

ER/Studio Capture

2. Domain 추가하기
일반적으로 DB 모델링에서 말하는 도메인이란 것은...
SQL서버로 치자면 "사용자 정의 데이터 타입" 같은 거라고 볼 수 있을 것 같다.

흔한 예로... 주민등록번호의 데이터 타입을 미리 약속해 놓지 않을 경우...
누구는 "-"을 포함하고... 누구는 빼기 때문에 char(13), char(14)가 혼용될 수 있는데...
이런 것이 바람직하지 않다는 것은 대다수가 공감하는 부분이다.

보통 도메인과 컬럼명의 관계는 1:N이다.
예를 들면... "등록일자, 가입일자, 탈퇴일자, 개봉일자"는 모두 "날짜"라는 도메인에 속한다고 보기 때문인데...

ER-Studio의 도메인 기능은 좀 다르다. 도메인과 속성명, 컬럼명의 관계가 1:1:1이다.

개인적으론 이런 방식을 좋아하지 않는데...
도메인이 컬럼 종류 만큼 있다면... 굳이 도메인 정의를 뭐하러 하겠는가? ㅡㅡ;

이런 이유로... 한번 정의해서 사용된 도메인을 수정할때... 도메인을 바인딩하고 있는 컬럼 이름이 도메인 정의에 포함되어 있는 컬럼 이름으로 바뀌지 않도록 신경을 써줘야한다.

지금 단계에선 조금 어려운 얘기일 것 같은데... 잘 이해가 안된다면 그냥 스킵해도 상관없다.

- 도메인을 추가하려면 왼쪽 탐색창의 하단 탭 중 Data Dictionary탭을 클릭한다.
- 그러고 나면 아래 화면이 나오고... 그대로 따라하면 된다.
ER/Studio Capture

- 문제의 도메인 추가 화면이다.
- 도메인을 추가하고 사용할 데이터 타입을 정의한다. (속성명과 컬럼명은 도메인명과 싱크하도록 둔다.)
ER/Studio Capture

- Definition탭에 이 도메인과 바인딩할 컬럼에서 공통으로 사용할 정의 문구를 적어둔다. 이렇게해두면 논리모델링 단계에서 도출된 속성명을 정의할 때... 손 노가다를 조금 줄일 수 있다.
ER/Studio Capture

- 위에서 스킵해도 좋다고 얘기했던 부분의 연장선상에 있는 설정 되겠다. ^^
- 도메인과 속성, 컬럼의 관계를 1:N으로 하고 싶기 때문에... 이름 싱크를 하지 않도록 설정했다.
- 참고로 아래 캡쳐화면에서 General Overrides > Datatype > Disallow로 되어 있는데...
이건 실수... Allow로 설정하기 바람 ^^;
ER/Studio Capture

- 위 과정을 반복하여 도메인을 쭈~욱 추가하면 아래처럼 보인다.
ER/Studio Capture


3. 논리 모델링
모델링 툴을 익히기에 가장 좋은 방법은... 직접 모델링을 해보는 것이라고 생각한다... (너무 당연? ^^)

여기서 다루는 모델링 주제는... 영화 이다.
간단히... 영화, 장르, 사람, 영화관련직업, 미디어 (VHS테입, 광디스크) 정도의 Entity로 출발해 보자.

- 캡쳐 화면에 표시가 빠졌는데... 모델에 Entity를 추가하려면 Toolbar 중 거의 정 가운데있는 하늘색 사각형 모양의 버튼을 누르면된다.
- 위에 언급한 Entity를 아래 화면처럼 추가, 배치한다. (이미지 사이즈가 커서 깨지는군요. 클릭해서 보세요 ^^)
- 보통 논리 모델링은 한글로 하고, 물리 모델링은 영어로 하는 회사가 많다. 지금 다니는 회사는 외국계라 그럴일이 없긴한데... 이 부분은 각자의 선택인 것 같다.
ER/Studio Capture

- [Movies] Entity에 Attribute를 추가한다. 디자인 화면에서 직접 추가하는 것이 편한데... Shift키를 누른채로 Entity를 클릭하면 된다.
- Attribute를 추가했다면... [Movies] Entity를 더블클릭해서 Entity Editor창을 연다.
- 각각의 Attribute를 Domain과 바인딩한다. (Attribute를 선택하고 드롭다운 메뉴에서 도메인을 선택하기만 하면 된다.)
ER/Studio Capture

- Definition 탭을 클릭하고... 해당 Attribute에 대해 정의한다.
ER/Studio Capture

- [Movies] Entity의 모든 Attribute를 정의한 모습
ER/Studio Capture

- 위 과정을 반복하여 모든 Entity에 Attribute를 추가하고, Domain과 바인딩한다.
ER/Studio Capture

- 다음으로 아래 Toolbar를 이용해 Entity간의 Relationship을 맺어 준다.
ER/Studio Capture

ER/Studio Capture

ER/Studio Capture

ER/Studio Capture

ER/Studio Capture

- 영화와 매체의 관계를 정의한다.
- 가장 흔하게 볼 수 있는 1:N의 비식별관계이고 FK컬럼이 NULL을 허용하지 않으므로... 필수관계이다.
- 즉, 위 Toolbar의 버튼 중... Non-Identifying, Mandatory Relationship을 이용하면 된다.
- 요령은 버튼클릭 > Parent Entity 클릭 > Child Entity 클릭. 간단하죠?
ER/Studio Capture

- 장르와 영화는 many-to-many 관계에 있다. Non-Specific Relationship 버튼을 이용하자.
ER/Studio Capture

- 영화, 인물, 직업의 상호 관계는 2개의 Entity간의 Relationship만으로는 표현할 수 없기 때문에... 직접 MoviesAndJobsAndPersons라는 Entity를 추가해야한다. (이런 타입을 교차 엔티티라고 한다.)
ER/Studio Capture
- 각각의 Entity를 교차 Entity와 연결한다.
- Cardinality는 one-to-many이고, 각 FK를 조합하여 PK가 되므로 식별관계이다. 따라서, Identifying Relationship 버튼을 이용한다.

ER/Studio Capture

- Supertype과 Subtype은 아래 Toolbar 아이콘을 기억해 두자.
ER/Studio Capture

- 우리가 영화를 보게해주는 매체는 여러가지가 있다. 스크린, 비디오 테입, DVD, 블루레이 등등
- 이런 매체들은 공통적인 속성과 각 매체만이 가지고 있는 속성이 존재하는데... 공통적인 속성을 [Media]라는 Supertype으로 묶고... 각 매체만의 속성은 별도의 Entity 즉, Subtype으로 분리해 준다.
- 위 아이콘 클릭 > Media클릭 > VHS클릭 > subtype cluster (반원모양인 것)클릭 > Discs클릭의 순서.
ER/Studio Capture

- Subtype cluster를 더블클릭하여 Subtype Cluster Editor창을 연다.
- 아래의 경우 모든 Subtype이 별도의 Entity로 분리된 것이 아니기 때문에 Incomplete를 선택하는데... 예를 들면 스크린이라는 매체는 Supertype의 속성으로 충분하기 때문에 별도 Entity가 없다.
- 각 Subtype은 서로 배타적이므로 Membership은 Exclusive를 선택한다.
- 마지막으로 구분 속성을 Supertype의 속성 중에 선택한다.
ER/Studio Capture

- 논리 모델이 완성된 모습
ER/Studio Capture


4. 논리 모델로부터 물리 모델 만들기
- 아래 캡쳐 화면을 쭈~욱 따라 한다.
ER/Studio Capture


ER/Studio Capture

ER/Studio Capture

ER/Studio Capture

ER/Studio Capture

ER/Studio Capture

ER/Studio Capture

- 생성된 물리 모델
- 위 과정을 그대로 따라왔다면... 사실 아래 화면과는 조금 다를텐데... ^^; 아래 ERD에서 데이터타입이 있는 자리에 Domain이 있을 것이다. (물리 모델에서는 데이터 타입을 보는 것이 개발자 입장에서 편하기 때문...)
- Display설정을 바꾸려면  Toolbar에서 Entity추가 버튼 바로 왼쪽의 노란색 버튼을 클릭하면 된다.
ER/Studio Capture


5. 매크로
ER-Studio가 좋은 이유 중 하나가... 매크로 기능이다.
매크로를 잘 활용하면 반복적인 작업을 쉽체 처리할 수 있다.

- Primary Key의 이름을 글로벌하게 처리해주는 매크로
ER/Studio Capture

- Foreign Key의 이름을 개인이나 회사가 사용하는 규칙에 맞게 설정할 수 있다.
- 아래의 경우 "FK_부모테이블이름_자식테이블이름"의 이름 규칙을 사용한다.
ER/Studio Capture

- 기본 제공하는 인덱스 이름 변환 매크로는... 우리 회사의 인덱스 이름규칙을 처리해 주지 못했다.
- 매크로를 직접 수정해도 되고... 아래처럼 손노가다를 감수할 수도 있다.
ER/Studio Capture

- 일일이 인덱스의 이름을 수정해 주고 있는 모습 ㅡㅡ;
ER/Studio Capture

ER/Studio Capture

- 컬럼 정의를 엑셀 쉬트로 내보내고 불러올 수 있는 매크로 (강추)
ER/Studio Capture

ER/Studio Capture


6. 물리 모델을 데이터 베이스에 배포
- 아래 과정을 쭈~욱 따라 해 보세요. (포스트가 길어지다 보니... 점점 지치고 있습니다 ㅠㅠ)
ER/Studio Capture

- DB에 직접 연결할 수도 있지만... 스크립트 파일을 생성하고 검토한 후 실행하는 방식을 권합니다.
ER/Studio Capture

ER/Studio Capture

ER/Studio Capture

ER/Studio Capture

ER/Studio Capture


7. Compare and Merge Utility
논리모델, 물리모델, Database의 싱크가 깨지지 않도록 잘 관리해야겠죠?
Compare and Merge Utility를 통해 모델간의 싱크가 잘 맞도록 해줍니다.
ER/Studio Capture

- 물리 모델을 Database와 비교합니다.
ER/Studio Capture

ER/Studio Capture

ER/Studio Capture

- 물리 모델과 Database의 비교 결과는 모두 일치 였던 관계로... 물리 모델과 논리 모델을 비교해 보도록 하죠.
ER/Studio Capture

ER/Studio Capture

- 물리 모델에서 PK, FK, Index 이름을 수정하면서... 논리모델과 달라진 부분이 많습니다.
- 아래 그림처럼 Merge할 방향을 설정하고 Finish를 누르면 됩니다.
ER/Studio Capture


'SQL Server > ER Studio' 카테고리의 다른 글

Windows 7에서 ER/Studio 8.0.3 build 6051 한글 깨짐  (0) 2009.08.18
ER/Studio 8.0 New Features Guide  (0) 2009.07.15
ER/Studio 8.0.3  (3) 2009.07.13