eXERD 는 경력자 뿐만 아니라 초보자도 데이터베이스 설계를 직관적이고, 쉽고, 빠르게 하도록 개발된 이클립스 기반 지능형 모델링 도구이다. 여러 DBMS를 지원한다. Oracle, MS SQL, IBM DB2, PostgreSQL, MySQL을 대상으로 포워드/리버스 엔지니어링을 지원한다.
ui도 깔끔하고 직관적이고 매우 좋은 툴이다. 그리고 공부용으로는 무료이다. 당연히 기업유저는 돈을 내야한다.
다운로드를 클릭하여
개인 사용자를 받아서 설치를 진행한다.
여기서 팁은 저기 설치경로를 C던 D던 편한곳에 exerd폴더를 하나 만들어서 설치를 한다.
그리고 나중에 밑에 처럼 workspace를 잡을 때 설치된 폴더로 경로를 잡아주면 하나의 폴더에서 쉽게 관리를 할 수 있다. 뭐 이렇게 안 해도 되는데 편의상 이렇게 하겠다.
그리고 실행을 하면 이렇게 환영 메세지가 나온다. 동영상도 잘 만들었으니 한 번 시청해주시고 닫아준다.
그러면 밑처럼 이클립스 ui비슷하게 뜬다. 매우 깔끔하니 보기 좋다.
위에 파일 -> 새로작성 -> 프로젝트 -> 일반 을 선택후
프로젝트명을 써준다. 그냥 편한대로 하자.
그리고 프로젝트 우클릭 새로작성 - > exerd File 클릭
이렇게 대상 DBMS를 선택한다. 본인이 쓰고 있는 DB를 선택하자. 그리고 파일이름을 정하고 완료를 누르자.
그러면 이제 새로운 여정이 시작된다. 야호
왼쪽에 테이블을 누르고 스케치북으로 끌어다가 놓자.
저렇게 아기 테이블이 만들어진다. 테이블을 누르고 space 를 누르자 (키보드 space)
이렇게 속성이 나온다. 물론 마우스 우 클릭 후 속성에 들어가도 똑같이 나온다.
논리이름과 물리이름을 설정한다. 이것이 무엇인지 궁금하다면 지난 데이터베이스 관련 포스팅을 참조하자. 그리고 어차피 모델링 실습은 저번 시간의 내용을 가지고 만들 것이므로 한 번 보고 오는 것이 낫겠다.
http://pjh3749.tistory.com/159
자 이제 왼쪽에 칼럼을 누르자.
그리고 처음엔 비어있을 것이다. 우측에 플러스 버튼을 누르며 항목을 추가하자. 저번 시간에 만든 내용을 토대로 만든 것이다. 회원약관의 테이블은 약관항목코드가 primary key이다. 저기 동그라미 부분을 더블클릭하면 저렇게 열쇠모양이 생기면서 pk가 된다. 그리고 상단의 논리이름과 물리이름이 자동으로 생성된다. 데이터 타입도 만들어주자.
팁) 속성안들어가고 테이블누른 후 단축키를 써보자.
CTRL+SHIFT+ENTER : pk추가
CTRL+ENTER : 칼럼추가
아 그냥 물리이름도 같이 만들자. 이것은 나중에 리버스 엔지니어링할떄 테이블을 만들때 사용되게 된다. 물리이름이란 진짜 데이터베이스의 칼럼명을 의미하기 때문이다.
원래 논리 설게가 끝난 후 물리설계를 하는것이다! 지금은 그렇게 하면 포스팅이 너무 길어져서 한 번에 한 것이다.
칼럼에 DT라는 것이 있으면 DATETIME이 있구나 하고 개발자에게 알려주는 것이다. 상호 암묵적인 약속이므로 설계할 때 개발자를 배려해준다.
칼럼약어 용어는 각 회사마다 단어장을 정한 것이 있을 것이다. 대체로 자음만 모은다. 예를들어 comment면 cmmt 이렇게 말이다.
대체로 5글자를 넘지 않는다. 뭐 group처럼 5글자까지면 그냥 통으로 쓰기도 한다. 이건 정하기 나름이므로 각 회사의 rule을 따르자.
그리고 이 약관에 동의했는지에 대한 테이블 또한 만들자.
약관항목과 회원id는 중복되면 안되므로 둘다 pk로 설정한다.
그럼 이렇게 둘이 안 친한 상태로 나타나게 된다.
둘을 비식별 관계로 이어주자. 관계형 데이터베이스 이므로 관계설정이 필수이다.
저걸 누른 후 회원약관을 클릭하고 약관 동의이력을 클릭해서 이어주자.
???
저 파란애는 누구지? 갑자기 불쑥 찾아왔다.
저것은 부모테이블인 회원약관에서 자식테이블로 연결해주었을 때 FK 외부키로 자동으로 만들어지는 것이다. 하지만 약관항목코드 우리 이전에 만들었잖은가. 그래서 중복이되어서 저렇게 하나가 더 생기는 것이다.
속성창으로가자.
밑에 자식컬럼을 누르면 셀렉박스로 쭉 내려온다. 거기서 첫 번째 항목인 약관항목코드로 바꿔준다. 그리고 컬럼에 가서 마지막 row를 X 해준다. 그럼 row가 날라가는 애니메이션과함께 날라간다. 그리고 비식별관계인 점선에서 식별관계인 실선으로 바뀌게 된다. 실선은 식별관계 pk가 연결되어 있는 것이다.
그리고 도메인이라는 것을 추가해보자. erd아래쪽에 보면 도메인이 있다. 거기에 문자 탭 마우스 우클릭 후 새 자식 도메인 만들기를 누른다. 그리고 저렇게 이름과 데이터타입을 만들어보자. 나중에는 본인이 쓸 것으로 만들면 된다. 어디서 쓰는지는 바로 밑에 나오니까 일단 만들자.
이제 회원 테이블을 만들 것이다.
데이터 타입이 중복되거나 여러개에서 자주 쓰이는 항목이 있다면 도메인을 눌러서 ㅋ 만 쳐도 자동완성으로 코드_2, 코드_4가 나온다. 그리고 DATE도 일시라는 도메인으로 원래 만들어져 있으니 저걸 쓰면 조금 더 가시적으로 보이겠다. 도메인 적용한 칼럼은 파란색으로 나온다.
그리고 사원넘버는 number가아닌 varchar로 하였다. 휴대전화도 문자열이다.
VARCHAR 에 관해서
VARCHAR1과 VARCHAR2는 동일하다. 하지만 오라클 측에서 VARCHAR1은 나중에 다른 기능을 쓸 것이라고 쓰지 말 것을 권고하고 있다.
한글 1글자는 3byte이므로 1000이면 33자정도 된다. 이건 dbms종류를 고려하자. 500글자로 써야지 하면 VARCHAR2(1500)이다.
팁) ForeignKey에 대해서
모델링에서 ForeignKey가 반드시 필요하다. 하지만 실제 데이터베이스를 생성할 때 fk를 설정하지 않는 경우도 많다. 그냥 연결관계를 알아서 join을 한다. 하지만 눈에 보이는 모델링에서는 relation이 없다면 업무의 흐름이 보이지 않기 때문에 꼭 해줘야한다.
하지 않는 경우의 이유는 운영상의 이유가 있다. 자주 발생하는 문제는 아니지만 문제가 생겨 데이터를 복구해야 한다면 복구절차는 부모 테이블을 먼저 Import(백업데이터 복구)하고 자식테이블 복구를 해야한다. 또 데이터 삭제는 반드시 FK가 걸려있는 자식테이블에서 먼저 삭제를 하고 부모테이블을 삭제를 해야한다. 처리 순서가 매우 중요하게 된다. 지키지 않는다면 에러가 폭발할 것이다. 주인 없는 유령데이터가 떠 돌아다니는 꼴이 되기 때문이다. 따라서 모델링(ERD)를 보고 Master(메인,부모) - Detail(하위, 자식) 의 연결관계를 파악하여 개발하는것이 보편적이다.
그렇다면 FK는 무조건 안 좋은 것인가??
FK를 생성하게 되면 개발자가 놓치는 부분은 DB에러가 발생하기 때문에 장점이라고 볼 수 있다. 하지만 이런 데이터의 일관성 문제는 충분히 고려하여 프로그램 설계를 하고, 개발자는 설계서를 잘 파악하고 개발하기 떄문에 개발자가 충분히 해결할 수 있는 문제이다. 하지만 회사에 따라 FK를 걸어야 하는 곳도 있다.
팁2) 논리모델과 물리모델을 동시 보면서 편집하고 싶다면 여기를 클릭하고 논리/물리 동시편집을 누르면 된다.
이제 나머지 테이블 2개를 만들어보자.
공통코드마스터와 공통코드디테일 이 2개이 테이블을 만들 것인데 이것은 저번 포스팅때 했던 코드들의 모음을 나타내는 테이블들이다.
이 코드관련 테이블은 모든 회사들이 다 가지고 있는 테이블이다.
이제 만들 수 있으니 이렇게 만들어보자. 이 두 테이블은 둘만 관계를 맺고 다른 회원테이블과는 관계를 맺지 않는다.
이제 실제 데이터베이스에 떄려 박자.
대망의 포워드 엔지니어링이다. 다시말해 모델링 이후 DBMS에 모델을 자동으로 등록해주는 기능이다.
SQL DEVELOPER를 쓸 건데 일단 유저를 만들어야 하므로
create user [유저이름] identified by [비밀번호]
grant resource to [유저이름]
grant connect to[유저이름]
grant create session to [유저이름]
grant alter session to [유저이름]
grant create table to [유저이름]
grant create view to [유저이름]
alter user [유저이름] QUOTA UNLIMITED ON USERS
알아서 만들고 권한을 준다.
그리도 디벨로퍼에 접속해놓자. 이 생성을 모른다면 그냥 검색하면 나온다.
위에
eXERD 누르고 포워드 엔지니어링을 누른다. 지금은 FK를 안 만드려고 하니 저기 2개 체크를 해제해준다.
아 참 그리고 이름앞에 스키마 표시를 해제 해준다.
계속 다음누르다보면 연결 설정이 나온다.
JDBC 드라이버가 필요하다. 오라클 설치폴더에 찾아가서 ojdbc5 를 찾는다. 경로는 오라클 설치폴더에 있다.
그리고 SID 입력해주고 (이건 오라클 설치할 때 xe든지 orcl이든지 본인이 설정한 것을 넣어준다. 그리고 호스트는 일단 로컬이므로 localhost로 적어준다. 뭐 다른 곳에 있는 db에 넣으려면 그 db의 주소를 넣으면 된다. 좀 전에 설정한 사용자와 비밀번호를 누르고 테스트를 한 후 완료를 누른다.
파바바박! 디벨로퍼 확인해보자!!
야호! 아주아주 잘 들어왔다.
이제 리버스 엔지니어링을 해보자.
리버스는 포워드와 반대로 DB에 있는 테이블을 erd로 볼 때 사용하는 것이다. 일단 그냥 테스트로 지금 만든 것 가져와보자.
eXERD메뉴에서 리버스 엔지니어링을 선택한 후 이 디비의 정보와 파일명을 입력한다.
이 화면에서 완료를 누르면 생성이된다.
여기서 연결관계가 없는 것은 아까 생성할 때 fk를 설정해제했기 때문이다.
이런식으로 포워드/리버스 엔지니어링을 진행하면 되겠다.
지금까지 eXERD설치와 모델링을 진행하는 간단한 방법을 알아 보았다.
개발 초창기에는 절대 테이블 create를 하지 않는다. 왜냐하면 모든 데이터베이스에 관한 내용을 다 알아야 하기 때문이다. 그리고 모델링은 답이 없는 설계이기 때문에 많은 경험을 통해서 최적의 설계를 해야하는 이유도 있다. 그래서 개발자 초기에는 테이블을 만드려고 하지말고 볼 줄 아는 연습부터 하라고 한다.
또한 모델링에서는 데이터가 언제 들어갔는지 언제 수정되었는지가 매우 중요하다.
등록일시 - 등록자 - 수정일시 - 수정자 이 4개의 세트는 무조건 들어간다. 누군가 언제 수정했는지 물어볼 때 확인하는 용도로도 쓰인다. 이 확인작업이 많이 일어난다면 더 들어가 수정테이블을 하나 더 빼서 만들 수도 있다.
예를들어보자.
시간에 관한 내용에서 언제언제부터는 주민번호를 보관하지 않을 것이다. 이런 요구사항이 있다고 가정하자. 적용일자는 미래(몇월몇일) 수정일자는 (오늘날짜) 이런식으로 미리 넣어놓을 수 있다.
가격같은것도 미리 넣어놓을 수 있다. 현재 어떤 물건의 가격이 1만원인데 미래에는 2만원으로 할 것이다. 이런 것처럼 적용일시를 주는 것이 실무에서 매우 많다. 실제 쇼핑몰에서는 가격의 일자컬럼이 무조건 들어간다.
프로모션(이벤트)을 생각해보자. 이것은 단기 반짝 할인, 7시부터 8시 20% 할인! 뭐 이렇게 프로모션을 한다고 치자. 그러면 프로모션 테이블을 따로 만들어서 먼저 가격테이블에서 가져오고 프로모션테이블에 있는 시간대를 가져와서 적용하는 식으로 처리한다. 뭐 장기적으로 오늘부터는 쭉 이가격으로 가겠다 하면 굳이 프로모션 테이블이 아닌 가격테이블에서 설정한다.
또한 업무를 계속하다보면 추가되는 칼럼이 계속 생기기 마련이다. 이러한 물리 ERD가 들어가기 전까지 최대한 빨리 끝내놓아야한다. 물리 ERD가 들어갔다는 것은 개발이 시작된것을 의미하기 때문이다.
도움이 되셨다면 공감 눌러주시고 궁금한 점 댓글남겨주세요~
'프로그래밍 > Database' 카테고리의 다른 글
[오라클] Grouping 과 Subquery (0) | 2017.03.31 |
---|---|
[오라클] Join문과 Aggregation (2) | 2017.03.30 |
데이터베이스 모델링과 회원가입 설계 (0) | 2017.03.26 |
Oracle 데이터베이스 Select문 완전정복 -(3) (0) | 2017.03.24 |
Oracle 데이터베이스 Select문 완전정복 -(2) (0) | 2017.03.23 |