1.회원
-일반회원등급컬럼은 삭제가능하다 회원구분으로만 하고 테이블을 줄일 수 있다. (팀원의 선택사항)
-회원아이디로 구분한다 ( PK)
-이름과 패스워드 이메일 전화번호는 NULLABLE 이다 ( 회원아이디는 PK 포함 )
-회원구분코드로 관리자/일반회원/요리사로 구분한다. (회원구분테이블을 만든이유는 회원구분을 관리자일반회원요리사에서 더 추가할 수 있기 때문에 테이블을 따로 한개 더 구분하다)
-일반회원포인트는 일반회원만 사용가능한 컬럼이기 때문에 NULLABLE 하다.
-일반회원포인트금액이 일반회원등급테이블에 어디에 속하느냐에 따라서 일반히원등급테이블의 일반회원등급컬럼이 결정된다 ( 조인)
예시 ) 일반회원포인가 1030 이면 등급포인트의 범위가 1000에서 2000인 3등급이 일반회원등급이 되고 조인을 하면 이 회원의 일반회원등급은 3등급이 된다.
-상태는 아직 결정 안함 ( 장기미사용자회원등등 )
2.일반회원등급
-일반회원등급은 1 에서 5까지만 구분한다.
-1에서 5까지의 각각 별칭을 구분한다
- 등급포인트는 100에서 500 / 500에서 1000 / 1000 에서 2000/ 2000 10000 / 10000 이상 이렇게 BETWEEN 을 사용해서 나누고 회원테이블에 있는 일반회원포인트의 숫자에 따라서 일반회원등급을 조회가능하다 ( 조인 )
3.회원구분
-회원구분코드로 관리자/일반회원/요리사로 구분한다. (회원구분테이블을 만든이유는 회원구분을 관리자일반회원요리사에서 더 추가할 수 있기 때문에 테이블을 따로 한개 더 구분하다)
4. 충전내역
//사실 충전내역을 조회하지 않는한 충전내역테이블이 없어도 무방..
-충전코드를 사용하지 않아도 된다. 충전을 조회할때 회원아이디와 날짜 등등만으로 조회가 가능하기 때문에 ( 구분코드를 사용할 필요성이 없음)
-충전내역은 여러번 존재하며, 충전내역으로 인해 발생한 포인트(충전을 해서 생긴 최종 현재 포인트) 의 결과값은 회원테이블의 포인트에 계산이 되서 나타난다. 따라서 + 가 아니라 포인트를 현금으로 바꾼후 원래 있던 포인트 - 현금으로 바꾼 후 남은 포인트 값은 회원테이블의 포인트에 나타나고, 충전테이블은 충전한 기록들만 나타나게 만든다.
-회원은 여러번 충전을 할 수 있기 때문에 회원은 1 이며 충전내역은 N개
-충전날짜는 SYSDATE 로 표현한다.
-충전포인트는 합계가 아니라 한번 충전한 포인트이며 총 포인트는 회원테이블에 나타난다.
5. 장바구니
-장바구니는 실제적으로는 회원1명당 1개가 존재하지만, 테이블에서는
장바구니 안에 들어 있는 품목들이 다양하고 클래스 또한 장바구니에 있기 때문에 회원한명당 1 : N 관게가 된다.
-장바구니는 삭제와 수정이 반복적이고 빈번하게 일어난다. 장바구니를 비우면 회원아이디에 해당하는 모든 ROW 가 지워져야 하며, 주문을 한 뒤에도 장바구니에 있던(주문한 제품들)은 모두 다 실시간으로 지워져야 한다.
-조회를 할 때는 회원아이디로 GROUB BY 를 사용하여 회원 1명의 장바구니를 조회할 수 있다.
- 따라서 PK 컬럼이 존재할 수가 없다. 실제적으로 장바구니에 있는 여러 데이터 ROW 가 한 회원당 한개의 장바구니를 구성하고 있기 떄문이다.
-클래스의 금액은 데이터에 저장되지 않기 때문에 ( 조원들의 선택) 장바구니에 들어있는 클래스의 금액이 없을 수도 있다. 따라서 금액컬럼은 NULLABLE 하다.
-장바구니 내역을 등록할때 식료품테이블이나 클래스테이블에 있는 식료품명과 클래스명이 동시에 등록되게 해야한다.
-> 장바구니테이블에 식료품명과 클래스명을 넣어서 컬럼 갯수를 늘린 이유는 조회의 성능을 향상시키기 위함이다. -> 식료품코드와 클래스코드만 넣으면 장바구니를 조회할 때 식료품테ㅣ블과 클래스테이블을 조인해서 두테이블에서 식료품명과 클래스명을 가져와야 한다. 장바구니는 조회가 빈번한 테이블로 예상이 되기 때문에 컬럼에 식료품명과 클래스명을 등록했다.
-식료품과 클래스를 두개를 구분한 이유도 식료품테이블과 클래스테이블에서 FK를 가져와야 했고 두개를 구분해서 조회하기 위해서 필요한 사항이었다.
6. 식료품
-식료품코드로 구분이되고 판매자테이블로부터 판매자 코드를 받아온다.
- 판매자테이블을 등록하는 것이 필요하다고 생각하지만, 중급프로젝트에서 판매자 테이블을 삭제해도 무방할것같다. ( 수정은 필요하다고 생각함)
- 식료품을 구분하는 구분컬럼을 추가는 가능하나 그렇게 되면 식료품 구분 테이블을 하나 더 만들어야 할 것으로 보인다.
7. 판매자
-판매자코드로 구분하며 반드시 회사명이 존재하는 것은 아니다. 회사가 없는 개인판매자도 존재할 수 있기 때문이다. 따라서 회사명은 NULLABLE 하다.
8. 주문
-주문 코드로 구분한다. PK
-회원아이디 1명당 주문은 여러번 할 수 있기 때문에 1 : N 관계이다.
-결제날짜는 SYSDATE 이다.
-결제상태는 결제완료는 paid 의 P /최종구매완료 done의 D/취소 cancle의 C로 구분한다. 결제전 데이터는 주문테이블에 존재할 수없다. 그이유는 주문이 발생한 시점과 동시에 주문테이블에 데이터가 들어가기 때문이다.
-최종구매완료값을 넣는 이유는
-금액은 주문한 총 금액을 말하며 이것은 장바구니에 있던 제품중 주문이 발생했을때
장바구니에 있던 주문이 발생한 제품은 삭제가 되어야 하며 동시에 장바구니 안에 있었던 주문이 발생한 품목들 금액들이 총합계가 계산되어서 주문 테이블의 금액컬럼의 ROW에 넣어져야 한다.
-주문제품명은 식료품테이블이나 클래스테이블에서 온 제품명이고
주문제품구분은 주문이 식료품인지 / 클래스인지 구분해주며 식료품이면 G 클래스이면 C 로 구분한다.
9. 공지사항
-공지사항코드로 분류가 된다.
-제목과 내용등 전체 컬럼은 NULL 이 불가능하다.
-관리자 코드는 회원테이블의 아이디에서 따온다 ( 회원테이블에 회원구분코드가 존재하기 때문에 )
-작성일은 sysdate 로 결정된다.
-공지사항은 독립된 테이블로 존재한다 ( 회원테이블이 관리자도 포함된다면 회원테이블의 직원이름이나 직원코드가 공지사항의 관리자코드컬럼으로 FK 이 될 수 있다.
10. 이벤트
-이벤트 코드로 구분한다 (PK)
-이벤트명이 있다
-이벤트 발생날짜나 정보등을 컬럼으로 만들 수 있다. ( 아직 생성안함 )
-이벤트 공지사항을 한테이블에 만듬으로써 조회성능을 높인다. 이벤트공지내용은 등록을 안하는 것이 가능하다 NULLABLE
-이벤트공지내용이 아닌 이벤트코드와 이벤트명만 select 해서 조회를 하면 전체 이벤트를 조회할 수 있다. 이벤트코드 1개당 1개의 이벤트공지내용을 등록이 가능하다 ( 수정가능) 또는 공지내용이 없을 수 있다.
12. 클래스
클래스코드로 구분한다 ( PK)
시작날짜와 종료날짜가 정해지지 않을 수 있기 때문에 NULLABLE 로 설정한다.
클래스의 상태는 시작전/진행중/진행완료로 구분한다.
13.클래스리뷰
클래스리뷰코드로 글을 구분한다 ( pk )
클래스리뷰는 회원만 작성이 가능하고 여러개를 작성할 수 있기 때문에 1: N관계로 설정한다.
클래스에 대한 리뷰이기 때문에 FK 로 관련된 클래스를 표기해준다. 1개의 클래스당 여러개가 작성이 가능하기 때문에 1 : N관계로 이루어져 있다.
14. 문의
-문의 코드로 구분한다 ( PK ) -
-회원이 작성 가능하다
15. 문의 답글
-문의답글코드로 구분한다 ( PK )
-어떤문의에 대한 답글인지 문의코드가 FK 컬럼이다
-작성날짜는 SYSDATE 로 한다.
16. 게시판
-회원이 작성가능하며 회원이 여러 글을 작성가능하기 때문에 1 : N 관계이다.
-게시판코드로 구분한다 ( PK )
- 작성날짜는 SYSDATE 로 하고 수정할 때마다 작성날짜가 실시간 적용된다.
17. 게시판 답글
-어떤 게시글로 부터온 답글인지 구분하기 위해 게시판코드를 FK 로 설정한다.
-회원이 작성가능하다 ( 관리자도 회원테이블에 있다. )
-게시판답글코드로 구분한다 ( FK )
* 실제로 EXERD 에서는 장바구니테이블의 제품코드가 식료품테이블의 식료품 코드거나 클래스 테이블의 클래스 코드이다.
** 중요 : 많은 테이블이 각각을 구분하기 위하여 코드를 가지고 있다. 그런데 코드중에서 게시판은 시퀀스로 번호가 부여가 되어야 하며 순차를 가져야 하며 예를 들어 충전코드등은 순서를 가질 필요가 없다. 그래서 코드컬럼을 만들때 순서를 가져야 하는 애는 테이블을대표할수있는이니셜 + 시퀀스 번호로 부여를 함으로써 대표코드와 시퀀스를 두개를 만들어야 하는 번거로움을 줄이고자 한다. 정렬이 필요없는 애들은 코드를 랜덤으로 부여가 가능하다. -> 시퀀스를 많이 만들면 성능상 좋지 않을것으로 예상. 또는 INT인 전역변수를 만들어서 ++ 하는 것도 가능하다.
댓글
댓글 쓰기