2. 기록된 내용에서 물건 구매 내역이 없는 고객 위로 정렬 ▷ L자형 테이블이 되어 낭비되는 공간 생김
3. L자형 테이블을 빈칸이 있는 곳과 없는 곳으로 분류 ▷ 고객테이블, 구매테이블로 분류하여 공간 절약 ▷ 고객 테이블 중복 제거 ▷ 기본 키(PK, Primary Key) 필요 ▶ 고객 이름을 고객을 구분할 수 있는 구분자로 설정 ▶ 각 행을 구분하는 유일한 값 ▶ 기본 키의 조건은 중복되지 않고 비워있지 않아야함 ▷ 구매 테이블에 '누가 구매했는지' 표기 위해 고객 이름 필요
4. 테이블 간의 업무적인 연관성(Relation) 정의 ▷ 주 (Master)가 되는 쪽이 부모 테이블 ▶ ex) 고객이 물건을 소유(o), 물건이 고객을 소유(x) ▶ 주가 되는 고객 테이블이 부모, 상세가 되는 구매 테이블이 자식이 됨(1 : N 모델) ▷ 기본 키(PK, Primary Key) ▶ 중복되지 않고 비어있지 않아야함 ▷ 외래 키(FK, Foreign Key) ▶ 외래 키로 부모 테이블에서 유일하게 하나의 정보를 얻을 수 있음 ▷ 제약조건 ▶ 새로운 데이터 들어갈 때는 부모 테이블에 먼저 넣어야 함 ▶ 데이터 삭제시에는 자식 테이블에서도 지워야 함
5. 완성된 고객 테이블과 구매 테이블의 구조 정의
◎ 정의한 테이블을 다이어그램으로 만들기
1. Workbench 실행하고 localhost로 접속, 열린 쿼리 창 모두 닫기 2. 모델 다이어그램 작성 ▷ [File] → [New Model] 선택 ▷ [MySQL Model] 탭에서 DB 이름 수정 ▷ 기본적으로 데이터베이스 이름은 'mydb' ▷ 데이터베이스에서 마우스 오른쪽 버튼 클릭 후 [Edit Schema], 'modelDB'로 이름 수정 3. 모델 다이어그램 작성 ▷ [Model Overview]의 [Add Diagram] 더블 클릭 ▶ [EER Diagram] 탭 추가되고 다이어그램 그릴 수 있는 상태 ▷ [Place a New Table] 아이콘 클릭 → 빈 화면에서 다시 마우스 클릭해 테이블 생성 ▶ 다이어그램의 table1을 더블 클릭 → 고객 테이블(userTBL) 만들기 ▶ 같은 과정 반복해 구매 테이블(buyTBL) 작성
▷ 테이블 간에 1:N 관계 맺어주기 ▶ <Place a Relationship Using Existing column> 아이콘 클릭 ▶ buyTBL의 'userName' 열과 userTBL의 'userName' 열을 차례로 클릭 4. 모델링 파일 실제 데이터베이스에 적용 ▷ Workbench 메뉴의 [File] → [Open Model] → modelDB.mwb 열기 ▷ [Database] → [Forward Enginner] 선택 ▷ [Forward Enginner to Database] 시작되면 ▶ [Set Parameters for connecting to a DBMS] 기본값 ▶ [Set Options for Database to be Created] 기본값
▷ Root 비밀번호 입력 ▷ [Select Objcets to Forward Engineer] 에는 'Export MySQL Table Object' 체크 ▷ [Review the SQL Script to be Executed] → 자동 SQL문 생성
5. 다이어그램에서 데이터베이스로 내보내기한 결과 확인 ▷ [Navigator] → [Schemas] ▶ 빈 곳에서 마우스 오른쪽 버튼 클릭한 후 [Refresh All] 선택하여 새로고침 ▷ modelDB 데이터베이스 확장해 테이블 확인 6. 기존 존재하는 데이터베이스 이용해 다이어그램 작성 ▷ ShopDB의 테이블, 인덱스, 스토어드 프로시저, 트리거를 다이어그램으로 변경 ▷ Workbench 메뉴의 [Database] → [Reverse Engineer] 선택 ▶ [Set Parameters for connectiong to a DBMS] ▶ [Connect to DBMS and Fetch Information] ▶ [Select the schemas below you want to include:] ▶ [Retrieve and Reverse Engineer Schema Objects] ▶ [Select Objects to Reverse Engineer] ▶ [Reverse Engineer Progress]의 세부 단계 설정 ▶ [Reverse Engineer Results]에서 4개에 테이블, 1개 뷰, 1개 루틴(=스토어드 프로시저) 변환된 것을 확인