데이타베이스 설계 고민입니다.
(WEB 방식은 아니고 매장 에서 서버로 접속해서 보는 C/S 입니다.)
주업무: 전국의 매장에 있는 제품들(88로 시작하는 바코드)의 단가비교 입니다.
각 매장에서 상품을 선택후 [단가비교 하기] 선택하면 SERVER 로 부터 최고,최저 가격(단가,판가)을 보여주고
최고 와 최저의 범위네에 있는 10개의 단가를 보여줄려고 합니다.
바코드 품명 , 규격 매입단가, 판가 지역
88006604 과자 1000 2000 서울
88006604 과자 900 1900 대구
88006604 과자 900 1900 부산
88006604 과자 800 2000 광주
88006604 과자 700 2000 대전
추가로 서울을 선택하면 서울의 내용을 위의 형식대로 한번더 보여줄려고 합니다.
(옥션과 같은 형태)
업무상세: 각 지역마다 저희가 배포하는 프로그램을 사용하는 매장들이 있습니다.(매장은 유동적이며 계속 증가하는 추세입니다.)
각 매장마다 취급하는 품목은 다른지만 대부분 88... 코드를 취급하므로 88 코드로 시작하는 바코드만 관리하면 됩니다.
전국각매장에서 88로 시작하는 바코드와 매입단가, 판매단가을 SERVER 로 올립니다.
위와같이 구상중인데 DATABASE 설계를 어떻게 해야 할지 고민입니다.
(회사에 DB에 대해 전문적으로 아는 사람은 없습니다. 자기가 처한 환경은 알아서 헤쳐나가야하는 ㅠ.ㅠ)
제가 구상해 본 내용 :
Master Table :(각 바코드별로 10개의 최고최저 단가을 저장하는 테아블)
index: 바코드 + 지역으로 (복합인덱스생성)
테이블 구조 : 바코드,지역, 단가, 판가,
-- 매장에서 자료을 올리면 해당 바코드가 10개가 아니면 무조건 Insert
10개 이상이라면 단가, 판가 비교해서 update 할지 말지 정함.
문제점: 바코드별로 10개가 채워지는 시점이 각기 다르므로 인덱스 Page Splite 이 엄첨 발생을 합니다.
결국 index가 아무런 의미가 없어져 버립니다.
최초에 한번만 전체적인 단가및 판가을 올리고 다움부터는 수정된 내용에 대해서만 자동으로 SerVer에 갱신됩니다.
여기에서 Page Splite 때문에 딱 막혀 버렸습니다.(매번 인덱스 재생성할수도 없구..)
하나의 테이블 만 잘 설계하면 나머지는 같은 방식으로 처리하면 될것같은데 ........
도움좀 부탁드립니다. 글이 두서가 없어 보여도 양해 부탁드립니다.
몇날 몇일을 고민하다 질문드립니다.
감사합니다.
좋은하루 되세요.
옥션은 DB설계가 어떻게 되어 있는지 막 궁금해 집니다.
Comment 3
-
쓸만한게없네(윤선식)
2015.03.26 17:12
-
三流
2015.03.27 00:05
POS 시스템 DB 구상 하시네요.
위에 쓸만한게없네 이분이 하신 기본적인 설명을 가지고 ERD 를 그려보시기 바랍니다.
머리속 구상을 구체적으로 표현하고 논리적인 부분을 접근하시면 남에게 도움을 요청하는데도 편리합니다.
문제점으로 제기 하신 " 인덱스 Page Splite 이 엄첨 발생을 합니다." 이부분은 설계도 안한 상태에서
생각 하실부분은 아닌것 같습니다.
-
희망나라
2015.04.01 13:55
감사의 인사가 늦었네요.
두분 답변 감사드립니다..
두분 덕분에 설계 잘 되었습니다.
고맙습니다.
우선 Clustered Index 와 Non Clustered Index 의 구조를 먼저 확인하시는 게 좋을 것 같습니다.
옥션이나 지마켓같은 쇼핑몰의 경우엔 외부에 보여지는 상품코드 이외에 내부적으로 INT나 BIGINT 값을 Clustered Index 로 가지고 가는 경우가 많습니다.
즉 바코드와 같은 참조키 성격의 데이터는 Non clustered Index 로 받아서 Search 할 때 사용하고 실제로는 Identity 값으로 update 나 새로운 데이터를 insert 하는 식이죠.
아울러 실제로 Barcode 가 무조건 unique 한 지도 확인해야 합니다.
이는 기본적으로 옵션에 관련된 이야기인데요...
옵션상품이나 묶음 상품등이 발생해서 함께 재고관리를 해야 하면 Barcode 만으로는 관리가 안 될 수 있기 때문입니다.
위와 같은 상황에서 제 짧은 소견으로는...
* 상품
- 상품키(Clustered Index, Unique)
- 바코드 (Nonclustered Index)
- 상품관련 정보 (상품명, 설명, 기타 등등)
* 매장
- 매장번호(Clustered Index, Unique)
- 매장명
* 매장별상품
- 매장별상품키(Identity, Clustered Index)
- 상품키 (FK)
- 매장번호 (FK)
(-바코드 : 필요시 비정규화)
* 상품판매
- 상품판매키(Identity, Clustered Index)
- 매장별상품키(FK)
(- 매장번호 : 필요시 비정규화)
(- 상품번호 : 필요시 비정규화)
- 판매가
- 기타 등등
실제 설계는 구조와 판매장식을 자세히 파악하고 하시는 게 좋을 것 같습니다.
이상입니다.