예를 들어 뭐 어떤 지점이 가진 상품의 목록을 알고 싶다 그러면
테이블A (지점정보)
[지점코드] [점장] [연락처]
가 있겠죠.
만약 관계형 데이터베이스 모델을 무시한다면
[지점코드] [점장] [연락처] [보유상품]
해서 [보유상품] 에다가 A,B,C,D,E,F,G 뭐 이런 식으로 때려박으면 될 거에요.
근데 RDBMS 모델은 값이 원자적으로 들어가라고 하고 있어요
(물론 요즘 최신 DB들은 저기에 JSON OBJECT는 넣을 수 있게 해 줘요)
관계형 데이터베이스이기 때문에 보유상품에는 아쉽게도 원자값만 들어갈 수 있어요
그런데 저 놈이 보유상품이 여러 개라고 해서
테이블A에
지점1 / 점장1 / 연락처1 / 상품1
지점1 / 점장1 / 연락처1 / 상품2
지점1 / 점장1 / 연락처1 / 상품3
지점2 / 점장2 / 연락처2 / 상품1
지점2 / 점장2 / 연락처2 / 상품2
지점3 / 점장3 / 연락처3 / 상품3
지점4 / 점장4 / 연락처4 / 상품1
이런 식으로 만들어두면 존나게 지저분할 거에요
그러니까 테이블B를
[지점코드] / [보유상품] 으로 만들어서
테이블A에는
지점1 / 점장1 / 연락처1
지점2 / 점장2 / 연락처2
지점3 / 점장3 / 연락처3
지점4 / 점장4 / 연락처4
만 두고
테이블B 에
지점1 / 상품1
지점1 / 상품2
지점1 / 상품3
지점2 / 상품1
지점2 / 상품2
지점3 / 상품3
지점4 / 상품1
이런 식으로 잡아 쳐 넣어서
A와 B를 지점코드를 FK로 1:N 시키면
각자가 가지는 정보는 최소로 하면서
지점1 / 점장1 / 연락처1 / 상품1
지점1 / 점장1 / 연락처1 / 상품2
지점1 / 점장1 / 연락처1 / 상품3
지점2 / 점장2 / 연락처2 / 상품1
지점2 / 점장2 / 연락처2 / 상품2
지점3 / 점장3 / 연락처3 / 상품3
지점4 / 점장4 / 연락처4 / 상품1
뭔가 존나 다 아는 걸 설명드리는 거 같아 살짝 뻘쭘하기는 하네요
근데 제가 하고싶었던건 이런거임
마지막 뽑아내는 테이블이 실제로 있다고 하면(그렇지는 않지만) 점장마다 가격의 총합을 뿌려주고싶어요
예 그러면 위에서 설명드린대로 차근차근 해 보시면 될 거에요
1:N 관계로 테이블을 출력하면 실제로 결과물은 맨 아래와 같이 나와요
저 테이블을 자주 사용해야 한다면 VIEW 라는 것으로 임시 저장시켜두고 빠르게 쓸 수도 있어요
흠 생각해보니 제가 하고싶은건 관계형DB에서 어긋나네요
말씀하신 부분은 GROUP BY 같은 구문으로 충분히 가능할 거 같네요
예 그래서 제가 처음에 말씀드렸을 때 값이 원자적이어야하기 때문에 값에 테이블을 중첩시키는 건 정의에 어긋날 거 같다고 말씀드린 거에요
제가 그럼 지점1에 대한 질의를 DB에 때려주면
DB는 테이블B가 지점에 따라 정렬되있으니까 지점1만 뽑아본다음에 지점2가 나오면 걍 쓸데없는 계산없이 종료하고 이래주는건가요?
제가 하고싶던게 그거거든요
멋지다
이제 알것같아요
멀티맵처럼 쓸수있었는데 그걸 몰라서 헤맸네요
음 인덱스만 제대로 걸려 있다면 어차피 내부적으로 정렬된 상태로 관리하기 때문에 불필요한 연산은 없이 원하시는 결과가 빨리 나올 거에요
물론 질의문에서 지점1만 뽑는다는 조건문이야 당연히 붙이셨을 거고
테이블B 같은 경우에는 저런 경우 2개 컬럼이 복합키로 주키를 가지겠죠
조금이라도 도움이 되셨다면 다행이네여
SQL FIDDLE 이라는 사이트가 있어여 간편하게 뭐 해보기 좋아요
됬다.. 코드 나왔어요 이렇게 하니까 10초나 걸리는 테이블추가를 할필요가 없어졌슴다
수고하셨어여~~
20160525//됬->됐 (되어 = 돼임) [리듬 맞춤법 봇♬]
20160525//되있->돼있 (되어 = 돼임) [리듬 맞춤법 봇♬]
거에요->거예요 (받침 있으면 이에요 없으면 예요 이로 끝나면 받침 없으므로 예요 요 떼서 말 되면 에요 아니에요는 예외 인명엔 예요(예 : 길동이예요) 성까지 쓰면 이에요(예 : 홍길동이에요)) [리듬 맞춤법 봇♬]
dz//거에요->거예요 (받침 있으면 이에요 없으면 예요 이로 끝나면 받침 없으므로 예요 요 떼서 말 되면 에요 아니에요는 예외 인명엔 예요(예 : 길동이예요) 성까지 쓰면 이에요(예 : 홍길동이에요)) [리듬 맞춤법 봇♬]
거에여->거예여 (받침 있으면 이에요 없으면 예요 이로 끝나면 받침 없으므로 예요 요 떼서 말 되면 에요 아니에요는 예외 인명엔 예요(예 : 길동이예요) 성까지 쓰면 이에요(예 : 홍길동이에요)) [리듬 맞춤법 봇♬]