처녀자리
52
2019-07-11 11:57:30
2
292

[DB-SQLITE] 생초보 모델링, 쿼리 관련하여 여쭤보고 싶어요..


DB 생초짜라 책을 보면서 간단한 예제를 구현해보려고 하는데

구현방식이 효율적인지 더 좋은 방법이 있는지 전혀 가늠이 안되서 여쭤보고 싶습니다..


고민의 핵심은 여러 ITEM을 하나로 묶는 LIST_CD 가 있을 때,

똑같은 ITEM 을 가진 다수의 LIST_CD 가 있다고 가정하면 어떻게 설계하는게 좋을지에 대해서입니다.


테이블은 2개를 만들었습니다.

1. LIST_CD를 관리할 GROUP_TB

2. ITEM을 관리할 LSIT_TB


TABLE "GROUP_TB" (

    "LIST_CD",  TEXT, PK

    "GROUP_CD", TEXT,

)


CREATE TABLE "LIST_TB" (

    "NO" INTEGER, PK

    "LIST_CD" TEXT, FK

    "ITEM" TEXT

);


1. 일반적인 경우의  상품등록

  - [GROUP_TB] 에서 새 LIST_CD "LIST1" 을 만든다.

  - [LIST_TB] 에 "LIST1"을 넣어서 아이템을 원하는 만큼 추가한다.


2. "LIST1" 의 상품검색은 아래와 같이 하면 되는 것 같더라구요..

  

    SELECT * FROM LIST_TB

    WHERE LIST_CD = "LIST1"


여기까지는 그렇구나~ 했는데..  아래에서 고민이 생겼습니다..


3. <문제> 새로만들 "LIST2" 는 "LIST1" 과 같은 아이템을 가지고 있고, 두 LIST_CD의 ITEM은 항상 같다.


제가 선택한 방법은..  GROUP_TB 에  LIST_REL 이라는 필드를 추가하고,

GROUP_TB에서  새 LIST 를 등록할 때,  연관된 LIST_CD를  LIST_REL 에 넣자는 것이었습니다.


(GROUP_TB 의 수정 - LIST_REL 필드 추가)

TABLE "GROUP_TB" (

    "LIST_CD",  TEXT, PK

    "GROUP_CD", TEXT,

    "LIST_REL", TEXT

)


4.  이제 GROUP_TB 에서 "LIST2" 를 생성할 때,  LIST_REL 필드에 "LIST1" 이라고 넣어줬습니다.

5. LIST2 의 아이템을 모두 출력하려면,  결국 LIST1의 아이템을 출력하면 되니까 아래와 같이 쿼리문을 짰습니다.

select * from LIST_TB
where LIST_CD = ( 
    select LIST_REL from GROUP_TB
    where LIST_CD = "LIST2"
    ) 

이렇게 하니, LIST2에 속한 아이템이 모두 다 나오더라고요..

6.  원래는.. LIST_TB에서 LIST_CD를 넣고 아이템을 가져왔는데..
    이제는 GROUP_TB에서 LIST_CD를 검색해서 LIST_REL이 있는지 확인하는 과정이 추가되었습니다.


이 시점에서 궁금한게 있는데요..

1. 상기 예제를 보면.. LIST2 의 LIST_REL에는 값이 있지만,  LIST1의 LIST_REL에는 NULL. 입니다.
   이 상태를 유지하면, 쿼리문에서 LIST_REL 이 NULL 인지 아닌지 판단을 해서 NULL 이면 원래 LIST_CD를 쓰고,
   NULL 이 아니면 LIST_REL에 있는 값을 써야 합니다.

  이렇게 쿼리문을 작성하는게 좋을지...    (이렇게 했을 때 쿼리문을 어떻게 작성해야할지 모르겠더라구요..ㅠ.ㅠ)

  아니면...

2. LIST_1의 LIST_REL을 NULL 로 두지 말고..  LIST_CD와 같은 값을 넣고..  쿼리문을 단순하게 하는게 좋을지..
   ( LIST_CD = LIST1,  LIST_REL = LIST1  과 같이 넣겠다는 뜻입니다.)

궁금하구요..   또.. 위와 같은 형태로 설계를 하는 것이 자연스러운지 궁금합니다..ㅠ.ㅠ


데이터의 양은..
GROUP_TB 에는 수천개의 레코드가 들어갈 수 있고,
LIST_TB 에는 수십만개의 레코드가 들어갈 수 있다 라고.. 가정해서 만들어보고 있습니다..ㅠ
(가정이 너무 모호할까요? ㅠ)

고수님들의 조언 부탁드립니다..

감사합니다...


0
  • 답변 2

  • 개나소나고생
    6k
    2019-07-11 12:52:28

    번외질문인데..왜 SQL Lite를 쓰는건가요?

  • 처녀자리
    52
    2019-07-11 14:07:04

    별도 서버 없이 앱 내에 db를 넣으려고 쓸 생각이었어요.. ^^;

  • 로그인을 하시면 답변 을 등록할 수 있습니다.