[가계부 프로젝트 - Java] 디비 설계 (Mssql)

프로젝트/가계부(2)  2015.01.28 00:37
안녕하세요. 명월입니다..
화면설계(?)가 완료되었으니 이번 포스팅에서는 디비 설계를 하겠습니다.
DB는 현재 운영중인MSSQL_Express를 이용해서 만들겠습니다.
DB테이블을 구성하자면 먼저 메인 가계부 테이블이 필요하네요. 그리고 카테고리 테이블이 있겠고 유저테이블이 필요합니다.
기본적으로 생각했을 때 이 세 테이블이 메인이 되겠네요.

그럼 DB에 접속해서 DB를 작성해 보겠습니다.


데이터 베이스 이름을 household_exam으로 명명하겠습니다.

먼저 유저 테이블을 작성해 보곘습니다.


유저아이디, 패스워드는 varchar(50)으로 설정하고 유저아이디는 primary key로 지정했습니다.
유저이름은 nvarchar를 사용했는데 저의 경우는 현재 일본 블로그에도 포스팅 중이기에 한국어 뿐 아니라 일본어도 지원되게 다국어캐릭터를 사용하였습니다. householdType을 만들었는데 각 그룹별로 각자의 가계부를 사용하기 위한 키입니다. 예를 들면 A그룹의 가계부 B그룹의 가계부 있을때 B그룹의 아이디는 A그룹의 가계부가 보이면 안되겠죠.. 그런 역할의 키입니다.
유저가 만들어졌으면 이번엔 카테고리 테이블을 만들겠습니다.


이번엔 카테고리 테이블입니다. Idx는 카테고리의 키 역할을 하겠고 type은 수입카테고리인지 지출카테고리인지의 구분입니다. 카테고리 이름은 말 그대로 카테고리이름입니다. 역시나 일본어를 수용해야 하기에 nvarchar를 사용했습니다. State는 삭제된 레코드인지 아닌지 구분자입니다. 개발하는 사람마다 개성이 다르므로 제가 옳다고는 이야기를 못하겠지만 저는 기본적으로 디비를 만들 때 최대한 삭제데이터가 없게 만듭니다. 웹이나 프로그램에서 Delete를 하면 퍼포먼스도 떨어지고(Update도 똑같지만요), 데이터 로그가 남지를 않아요.. 그래서 state 에 1를 줌으로 해서 삭제구분을 합니다.
그러나 대용량일 때는 어떻게 할까요… 정해진 날짜 시간마다 배치처리를 하는 경우가 많습니다. 운영적인 것은 후반에 할 수 있으면 그때 자세히 하겠습니다.
그리고 householdType입니다. 각 유저그룹별 type입니다.

다음은 메인인 가계부테이블입니다.


Idx는 키입니다. Householdtype은 아이디 별 그룹타입입니다.categoryType은 역시나 그룹별 type입니다.
Householddate는 가계 일시입니다. Type은 수입인지 지출인지 구분이고 content는 내역입니다.
Money는 돈이 되겠군요. Other 는 그 밖의 사항을 적어놓는 항목입니다. 그 외 작성자, 작성일시, 상태 컬럼이 있습니다.

여기까지 기본 디비 설계가 끝났습니다. 부수적으로 생각해 보면 로그인 로그 테이블이던가 세션관리 테이블 등등이 필요할 것 같으나 일단은 주요 메인을 작성하고 진행하면서 필요한 건 만들어 봅시다.
그러나 실무 프로젝트에서는 ER다이어그램을 사용해서 작성을 하길 추천합니다.

오늘은 여기까지 입니다. 감사합니다.


household.sql

댓글 2개가 달렸습니다.
댓글쓰기
  1. 르카류
    2015.01.28 03:27 신고 |  수정/삭제  댓글쓰기

    명월님 C#으로 프로그램 만들고 있는중인데요..
    명월님이 하셨던 것처럼 C# 작업할 때 분리된 패널로 작업을 했는데
    분리된 패널과 패널끼리 연결하는 과정에서
    다른 패널에 있는 값을 어떻게 가져와야할지 몰라서 질문드려요 ㅠㅠ
    지금 급한게 datagridview의 정보 연결을 해야하는데
    같은 패널 안에 있으면 변수가 먹는데
    다른 패널이 되버리면 전역 변수가 아니라서 인식을 못하더라구요..
    전체 프로젝트에 점포인터로 연결해도 먹질 않네요 ㅠㅠ
    어떡해야하나요

    • 明月 v명월v
      2015.01.28 11:20 신고 |  수정/삭제

      안녕하세요. 블로그 방문 감사합니다.
      패널과 패널끼리 연결을 하셨다고하는데 정확한 의미를...
      컨트롤 간의 데이터 공유라고 판단하고 답변하겠습니다.
      컨트롤 끼리는 각자의 클래스이기에 메모리 공유가 되지 않습니다.
      윈도우 폼을 작성하셨다고 하면 방법은 두가지 입니다.
      가장 C#다운 방법은 각 컨트롤은 Parent라는 프로퍼티가 있습니다.
      Parent는 보통 폼을 가르키는 프로퍼티지요.. (컨트롤안의 컨트롤이면 Parent.Parent 또는 ParentForm으로 찾으시면..)
      최상위 폼은 모든 컨트롤의 주소를 가지고 있습니다.
      Controls.Find(컨트롤Name)으로 그 컨트롤을 찾아서 값을 가져오는 방법입니다.
      두번째는 메시지를 이용하는 방법입니다. 이는 C++(MFC)방법인데..
      각 컨트롤의 포인터가 존재합니다.GetHashCode로.. 그 코드로 컨트롤을 취득해 와서..
      값을 가져오는 방법입니다.이 방법은 포인터를 직접 취득해 오는 방법이라 권장하지 않습니다.

      관련 포스팅은
      http://nowonbun.tistory.com/203이고
      첫번째 방법은 예제가 없네요.. ㅠㅠ

      혹시 이해가 안되시면 답변주세요.. 주말에 관련 포스팅을 하겠습니다.
      감사합니다.