앞서배운 디비 설계 순서에 맞게 디비 설계를 해보겠습니다. 게시판 쪽을 담당하여 게시판 위주로 적어보았습니다.


Tools
  • draw.io : ERD 다이어그램
  • mysql benchwork : EER Diagram 및 물리적 스키마 설계
  • intellij Database Tool

   나는 처음에 mysql로 EER Diagram으로 진행하다가 intellij 툴로 바꾸었다. 인텔리제이는 자동으로 테이블과 컬럼을 만들어주는게 쉽고 간편하게 되어있어 선택하였다. 


1단계 : 요구분석

나의 요구분석 예제

  화면요소

  • 상단바: 알림 버튼/ 게시판 리스트 / (검색)
  • 상단 배너 ( 자리 잡아놓기)
  • 메뉴바 : 홈 / 검색 / 글쓰기 / 북마크 / 마이페이지(설정)
  • pull to refresh
  • 포스팅 리스트

  ( 포스팅 리스트 필터, 최신순(글 작성기준)/ 최근 업데이트 순(댓글포함 기준) / 인기순 (좋아요 + 뷰) / 댓글순)

  뷰 수, 좋아요 수, 댓글 수, 북마크, 글 작성 일자 제공(1시간 이내 분단위, 1시간 이후 시간 단위, 24시간 이후 일별 단 위),  타이틀 및 텍스트(이미지 제공), 작성자 정보 제공(회사 정보, 닉네임)이 존재하고있다.

 


  • 자유게시판(Topic + 타임라인) 시시콜콜한 얘기 등 일반적인 자유 글 게시판인데, 사용자는 회사와 일반 이메일을 사용할수있다.
  • 회사라운지는 회사 정보에 따라서 (연봉/ 상사등) 게시글을 올리는 곳인데, 사용자는 회사 이메일만 사용할수있다.
  • 현 업계(IT/ 건설/통신/서비스 등)는 업계 트랜드, 업계 타사 동향, (연봉/채용)을 올리는 곳인데, 사용자는 회사와 일반 이메일(기능 제한)을 사용할수있다.
  • 현직군라운지(세일즈/기획자/디자인/프로그래머 등) 직군별 면접 질문, 이직 팁(연봉/채용)을 올리는 곳인데, 회사와 일반이메일(기능 제한)을 사용할 수 있다. 
  • (옵션) 관심업계(IT/건설/통신/서비스 등) 업계 트렌드와 업계 타사 동향, (연봉/채용)을 올리는 곳인데, 회사와 일반 이메일(기능 제한)을 사용할수있다.
  • (옵션) 관심 직군 라운지(세일즈/기획자/디자인/프로그래머 등) 직군별 면접 질문, 이직 팁(연봉/채용) 을 올리는 곳인데 회사, 일반 이메일(기능 제한)을 사용할수있다. 

1)게시글 메인 페이지 조회 (2일)

- Member 연동된 테이블 조회

- 검색조건 ( 게시글 제목 + 내용으로 검색)

- 정렬탭 선택후 ( 최신순, 인기순으로 선택 가능)

- (기능) 페이징 처리

- (기능) 게시글 조회, 글쓰기창으로 등록

- 게시글 제목 클릭시 상세페이지 이동

 

 

2)게시글 상세 페이지 조회 (5일)

- (기능) 이미지 업로드

- (기능) 조회시 조회수 증가

- 북마크 아이콘 클릭시 북마크 테이블에 수정, 등록, 삭제

- 좋아요 아이콘 클릭시 좋아요 테이블에 수정, 등록, 삭제

- 게시글 수정, 삭제, 등록

- 댓글 조회, 수정, 삭제

 

 

3) 북마크 페이지 + 좋아요 페이지(1일)

- 북마크 페이지

- 좋아요 페이지

 

다른 사람의 요구분석 예제
  • 한빛 항공사에 회원으로 가입하려면 회원아이디, 비밀번호, 성명, 신용카드 정보를 입력해야 한다
  • 회원의 신용카드 정보는 여러 개를 저장할 수 있는데, 세부적으로는 신용카드번호, 유효기간을 저장할 수 있다
  • 한빛 항공사에서는 보유한 비행기에 대해 비행기번호, 출발날짜, 출발시간 정보를 저장하고 있다
  • 한빛 항공사에서는 좌석에 대한 좌석번호, 등급 정보를 저장하고 있다
  • 회원은 좌석을 예약하는데, 회원 한 명은 좌석을 하나만 예약할 수 있고, 한 좌석은 회원 한명만 예약할 수 있다
  • 비행기에는 좌석이 존재하는데, 비행기 하나에는 좌석이 여러 개 존재할 수 있고 한 좌석은 반드시 하나의 비행기에만 존재해야 한다.

    그리고 좌석은 비행기가 없으면 의미가 없다. 


2. 개념적 설계

  개념적 설계로 E-R 다이어그램 만들기 

  작성한 요구사항 명세서에서 데이터베이스를 구성하는데 필요한 개체, 속성, 개체 간의 관계  를 추출하여 ERD를 생성합니다.

 

1. 개체와 속성 추출

  • 대부분 명사로 선별한다

2. 개체 간의 관계 추출

  • 개체 간의 관계를 추출한다

  • 대부분 동사로 선별한다 (개체간의 관계를 나타내는 동사이여야 한다)

  • 관계에 속한 속성도 있을 수 있다

  • 1:1, 1:N, N:M

  • 필수적인 참여, 선택적인 참여


1. 개체와 속성 추출

나의 개체와 속성 추출 예제
객체 속성
boardRandom 자유게시판 title, user, companyEmail, email
compRounge 회사라운지 title, user, companyEmail, email
currentWorkType 현 업계 title, user, companyEmail
currentWorkRounge 현직군라운지 title, user, companyEmail
interestWorkType 관심업계 title, user, companyEmail, email
interestWorkRounge 관심 직군 라운지 title, user, companyEmail, email
common 공통 테이블 id, noticeBoardId, appinfoid, listVersion, statusCode, title, linkUrl, createDatetime, createHost, updateDatetime, updateHost, lang_code, osDivisionCode, boardType
osDivisionCode os구분 android, LG+/android/LG U+, iphone1/ iphone2
다른 사람의 개체와 속성 추출 예제
객체 속성
회원 회원아이디, 비밀번호, 성명, 신용카드
신용카드 신용카드번호, 유효기간
비행기 비행기번호, 출발날짜, 출발시간
좌석 좌석번호, 등급

위쪽 다른사람의 요구분석을 참고해서 만드셨다. [출처 밝힘]


2. 개체 간의 관계 추출

  • 일대일(1:1), 일대다(1:N), 다대다(N:M)
  • 관계 : 선택적인 관계, 필수적인 관계
나의 개체간의 관계 추출
관계 관계에 참여하는 개체 관계유형 관계속성
존재, 업로드

게시판(필수) : 한 회원은 자유 게시판에(만) 접근할 수 있다

일반이메일(필수) : 한 이메일은 한 회원이 보유한다.  

1:N

ex)

자유게시판

존재, 업로드

게시판(필수) : 회사 이메일을 보유한 회원은 여러 게시판에 접근할 수 있다

일반이메일(필수) : 한 이메일은 한 회원이 보유한다.

(기능 제한)

 

회사이메일(필수) : 한 이메일은 한 회원이 보유한다. 

1:N

 ex)

현 업계,

회사라운지,

관심업계, 

관심 직군 라운지

존재, 업로드

게시판(필수) : 회사이메일을 보유한 회원만 회사라운지 게시판에 접근할 수 있다.

이메일(필수) : 회사 이메일은 한 회원이 보유한다. 

1:N

ex)

회사라운지

 

다른 사람의 개체간의 관계 추출
관계 관계에 참여하는 개체 관계유형 관계속성
보유

회원(선택) : 한 회원은 여러 신용카드를 가질 수 있다

신용카드(필수) : 한 신용카드는 한 회원이 보유한다

1:N  
예약

회원(선택): 한 회원은 여러 비행기를 예약할 수 있다

비행기(필수):  비행기 한 좌석은 한 회원이 예약한다

1:N

요구사항에서는 없음

ex. 예약번호

예약일자

존재

비행기(필수) : 비행기 하나에는 좌석이 여러개 존재한다

좌석(필수) : 한 좌석은 하나의 비행기에만 존재해야 한다

1:N 비행기 없이 좌석이 존재할 수 없음

 

IE 표기법

 

나의 ERD 생성

 

다른 사람의 ERD 생성

,

3. 논리적 설계

논리적 설계로 릴레이션 스키마 및 테이블 명세서 만들기

테이블 명세서 규칙1 : 모든 개체는 릴레이션으로 변환한다

테이블 명세서 규칙2 :  N:M 관계는 릴레이션으로 변환한다

테이블 명세서 규칙3 : 1:N 관계는 외래키로 표현한다

테이블 명세서 규칙4 : 1:1 관계는 외래키로 표현한다

테이블 명세서 규칙5 : 다중 값 속성은 독립 릴레이션으로 변환한다

 

나의 테이블 명세서

 

다른 사람의 테이블 명세서

규칙 1 : 다중 값 속성은 독립 릴레이션으로 변환한다

회원아이디 성명 비밀번호
1 박씨 1234
2 김씨 12345
3 이씨 123456

 

규칙2 :  N:M 관계는 릴레이션으로 변환한다

회원 릴레이션 회원번호 이름 부서
       
상품 릴레이션 제품번호 제품이름
     
주문 릴레이션 주문번호 회원번호 주문날짜  제품번호
         
주문 릴레이션 회원번호 제품번호 주문날짜
       

규칙3: 테이블 명세서 규칙3 : 1:N 관계는 외래키로 표현한다

 

신용카드 릴레이션 신용카드번호 회원아이디(외래키) 유효기간
       

좌석 릴레이션 좌석번호 비행기번호(외래키) 등급
       

규칙4: 테이블 명세서 규칙4 : 1:1 관계는 외래키로 표현한다

회원 릴레이션 사원번호 사무실번호(외래키) 이름
       
사무실 릴레이션 사무실번호 사원번호(외래키) 사무실전화번호
       

규칙5: 테이블 명세서 규칙5 : 다중 값 속성은 독립 릴레이션으로 변환한다

사원 릴레이션 사원번호 이름
     
자녀 릴레이션 사원번호(외래키) 자녀이름
     

4. 물리적 스키마 및 구현

intellij에서 테이블 생성

 

나의 물리적 구현

 

다른 사람의 물리적 구현

5. ERD 다이어그램 변경이력

나의 변경이력

 

다른 사람의 변경이력
ERD설계 이슈사항
 

- 회원이 예약할때 비행기+좌석을 같이 예약하지 않나? 

좌석은 비행기 없이는 존재하지 않음. 

 

결론

- 좌석은 weak entity임 

 

- 현실적으로 한 회원은 여러 비행기를 예약할 수 있다. 

1. 회원 릴레이션에 비행기번호를 추가하면 회원은 하나의 비행기만 예약할 수 있게 된다

2. 또한 한 비행기에 여러 회원이 예약될 수 있다. 

3. N:N이 맞아 보인다

6. 결론

 

출처 sources

'나의 프로젝트 > ERD 설계(DB) 및 기획' 카테고리의 다른 글

나의 프로젝트 : 기획단계  (0) 2020.03.02
1. 디비설계 순서  (0) 2019.12.19

+ Recent posts