PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2022/06/23 22:14:19
Name 멋진신세계
Subject [질문] 웹페이지 DB 계획하는 데 질문드립니다
PGR에 개발이나 코드 관련하시는 분들도 종종 계신듯 하여 질문을 남겨봅니다..
어떤 작업을 할 수 있는 웹페이지를 하나 만들고 있는 중입니다. (django로 만들고 있어요.)
현재 사용자가 할 수 있는 작업의 종류가 3가지인데, 이 작업들을 DB에 저장해놓고 나중에 다시 확인할 수 있도록 하고 싶습니다.

원래는 이 작업들 3개를 모두 하나의 리스트에서 사용자에게 보여줄 생각이었는데,
이 작업들의 성격이나 기록해야 하는 정보들이 조금 다릅니다.

예를 들면 이걸 운동 기록하기, 식단 기록하기, 독서량 기록하기라고 하면...
운동 기록하기: 작성일 (공통) / 운동 종류 / 중량 / 횟수
식단 기록하기: 작성일 (공통) / 음식 / 칼로리
독서량 기록하기: 작성일 (공통) / 책 제목 / 읽은 페이지
이런 식입니다.

제 얕은 지식으로 공부해보니 결국 DB를 만든다는 것이 엑셀 테이블 같은 것을 만들어놓고 관리를 해 나가는 것으로 이해되는데,
제 경우에는 하나의 테이블(i.e. 작업목록)에 모든 걸 기록하기 어려운 것 같았습니다.
그래서 두 가지 방법을 생각해 보았습니다.

1. 작업목록이라는 커다란 DB를 만들어서 아래와 같이 구성하고
   순번(기본키) / 작성일 / 작업자 / 작업종류(운동,식단,독서 중 하나) / 외래키(운동,식단,독서 중 해당하는 DB의 기본키)
   운동, 식단, 독서라는 별개의 DB를 하나씩 만들어서 실제 작업의 내용을 기록한다.

이 경우 작업목록이라는 DB의 정보들로 하나의 리스트를 만들어 사용자에게 보여주고,
사용자가 기록을 선택하면 해당하는 (운동,식단,독서DB의) 기록 보여주면 되지 않을까 생각했습니다.
다만 이런 식으로 외래키를 연결할 때 여러 DB의 기본키들을 섞어서 연결해도 괜찮은건지 모르겠습니다.
얕게 공부했을 때는 이런 예시가 전혀 안 보여서요...
위가 안되면 아래 방식으로 진행할까 합니다.

2. 아예 운동, 식단, 독서 DB를 따로 만들어 저장한다.
   사용자에게 운동, 식단, 독서별로 리스트를 따로 보여준다.
   혹은 운동, 식단, 독서의 기록을 모아서 (JOIN??) 하나의 작업목록이라는 리스트를 만든다.

1이 별로 좋지 않은 방법이라면 2처럼 따로 DB를 만들고 하나의 작업 목록으로 만드는 가공을 추가로 하거나,
아니면 방법이 없으니 따로따로 리스트를 만드는 것을 생각하고 있습니다ㅠㅠ

아마 가장 손이 덜 갈 것 같은 3번은 아래와 같습니다..

3. 그냥 DB 하나에 전부 저장하는데, 작업에 따라 필요한 칼럼에만 저장을 한다.
   (예를 들어 운동 작업이면 운동중량/중량/횟수가 기록되어야 하고, 음식/칼로리/책제목/페이지는 비워두는 방식으로요.)

아직 계획을 세우는 단계여서 개략적으로 예시만 들어 질문드리는데요..
가능/불가능 여부나 키워드만 알려주셔도 너무 감사하겠습니다. (꾸벅)

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
22/06/23 22:35
수정 아이콘
용어가 헷갈리시는거 같은데 운동,식단,독서 테이블을 한개씩 만들고
'실행일자'를 키로 조인해서 쿼리하면 됩니다
멋진신세계
22/06/23 22:41
수정 아이콘
작업목록을 전부 기록할 테이블은 필요하지 않고, 실행일자로 조인해서 그 내용을 기준으로 html이 생성된다는 말씀이신 거지요?
22/06/23 23:06
수정 아이콘
예 우선 테이블한개 만들어서 select데이터 화면에 한번 뿌리는거 해보시고
추가해가면 공부될거 같습니다 만약 사용자가 여러명이면 유저테이블이 또 필요할거고 키도 실행일자가 아니라 실행일자+유저아이디가 되겠죠
멋진신세계
22/06/24 07:04
수정 아이콘
네네 유저테이블은 따로 만들어야겠네요.. 감사합니다!
대보름
22/06/23 22:59
수정 아이콘
DB는 하나, 테이블은 세 개(운동, 식단, 독서), 작성일로 join 하시면 됩니다. 파이썬으로 MySQL이나 MariaDB를 사용하신다면, create database DB명으로 데이터베이스를 하나 만드시고, 운동, 식단, 독서 테이블을 만드시면 됩니다.
멋진신세계
22/06/24 07:07
수정 아이콘
일단 초보라서 django 책에서 제안한대로SQLite 쓰고 있었습니다 흐흐
유저로 조인시켜서 작성일로 정렬시키면 원하던 녀석이 나올 것 같아요. 감사합니다!
22/06/24 00:20
수정 아이콘
운동 테이블1
식단 테이블2
독서 테이블3
이 있을거고 각 테이블은 각각의 키가 있을 겁니다. 그 키는 고유해야 하고 날짜가 되면 안됩니다. 날짜는 중복될 가능성이 높겠지요.

작업목록을 생성하신다면 아마도 작업목록 테이블에는 대충
운동을 뜻하는 키 1, 운동 테이블의 키값
식단을 뜻하는 키 2, 식단 테이블의 키값
..
대충 이리 될껀데, 그렇게되면 고민해보셔야할게
만약에 운동 테이블에는 데이터가 있는데 작업목록 테이블에는 데이터가 어떤 오류로 추가가 되지 않을 경우는?
데이터 일관성 고민을 하셔야 하는데, 이 부분은 일단 저 3개 테이블에 데이터를 쌓고 웹 뷰에서 노출시키는 것까지만 완성하고 나면 이후에 고민해도 될 것 같습니다.
멋진신세계
22/06/24 07:35
수정 아이콘
각 테이블이 각각의 고유키를 가질 때, 운동테이블의 1, 2, 3, 4... 식단테이블의 1, 2, 3, 4... 이런식으로 각 테이블 안에서만 겹치지 않아도 되는 걸까요?
아니면 아래에서 말씀해주신 것처럼 (작업일시, 유저값)을 각 테이블의 고유값으로 사용해서, 운동테이블에서 존재하는 고유값이 식단테이블의 고유값으로는 존재하지 않게 해 주어야 하는 걸까요ㅠ_ㅠ
실제로 구현하려고 생각하면서 답변을 읽으니 질문이 또 생기네요.. 흑흑
(말씀하신 데이터 일관성 부분은 대강이나마 완성해놓고 다시 고민하겠습니다...)
당근병아리
22/06/24 06:10
수정 아이콘
(수정됨) 방법1 RDS
1. 운동,식단,독서 등의 테이블로 구성
2. unique index 는 회원고유값 + 작성일 구성
3. 회원고유값하고 작성일로 조인 즉 인라인뷰 하며 됩니다.
=> 추가로 하나의 테이블 하려면 회원고유값+(daily 종류:운동,식단,독서)+작성일을 pk나 unique index로 구성해야 되고 칼럼도 동일해야 합니다.

방법2 noSQL
document 형태로 작성일마다 필요한 data만 적재하는 것입니다.
회원 A
-> 2022-06-22 -> 운동, 식단
-> 2022-06-23 -> 독서

이런 형태이고 큰 잠정은 유연성이고 필요에 따라 저장할 수 있습니다.

.
2가지 방법이 있습니다.
멋진신세계
22/06/24 07:43
수정 아이콘
최종적으로 만들고 싶었던 작업 형태는 아래와 같은 표였거든요. 이렇게 그리려고 했을 때 2번 방법은 쉽사리 머릿속에 그려지지가 않네요ㅠ_ㅠ
3 운동 2022-06-22_18:42
2 독서 2022-06-22_10:22
1 독서 2022-06-21_11:34

첫번째 방법의 경우에는 특정 회원이 특정날짜에 한 일을 뽑는 것이랑 다른 걸까요? 지금 조인과 유니온 중에 뭘 써야하는지 오락가락하고 있네요....
당근병아리
22/06/24 09:04
수정 아이콘
RDS 로 하나의 테이블로 선택하므로
저 같으면 이렇게 구성하겠습니다.

pk | 작성자(회원) | 기록카테고리 | 기록일 | 카테고리종류 | 수량 | 횟수| 저장일
1 | AAA | 운동 | 2022-06-23 | 플랭크 | 0 | 5 | 2022-06-24 09:23:21
2 | BBB | 독서 | 2022-06-23 |어린왕자 | 100 | 0 | 2022-06-24 09:24:11
3 | CCC | 음식 | 2022-06-23 | 채끝등심 | 521 | 0 | 2022-06-24 09:30:21

이런식이고 unique안해도 될 것 같습니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
167333 [질문] 윈도11 그래픽설정-앱에대한옵션사용자지정 기능 질문드립니다. [1] 스핔스핔8416 22/11/19 8416
167332 [질문] amd 메인보드 b550m 및 450m 에 대해서.... [2] 고도칸황8176 22/11/18 8176
167331 [질문] 예전 오락실 격투게임 정식?으로 하는 방법 [8] 승승장구9282 22/11/18 9282
167330 [질문] 예전 본인이 썼다가 삭제한 글을 복구하는? [1] EY8446 22/11/18 8446
167329 [질문] 지마켓에서 시키지도 않은 물건이 왔습니다..무슨 경우일까요..(해결됐습니다...ㅠ) [16] 오렌지 태양 아래11763 22/11/18 11763
167328 [질문] 영어해석좀 부탁드립니다.(영어단어 및 문장) [2] 불독맨션7907 22/11/18 7907
167327 [질문] 은행 사이트 키보드 보안이라는 거 필요한 부분인가요? [9] 애플댄스7882 22/11/18 7882
167326 [질문] 엑셀) 동일이름이 여러번나올때 다른 열에 1번만 나오게 하는법 있나요? [4] will8967 22/11/18 8967
167325 [질문] 문명6 드디어 시작하는데 튜토리얼 필수인가요? [15] 제드13168 22/11/18 13168
167324 [질문] 혼술 안주 추천해주세요 [37] Sebastian Vettel13149 22/11/18 13149
167323 [질문] 외장하드 복사에 대해서 질문입니다. [1] 카페알파7460 22/11/18 7460
167322 [질문] 유게에 있던 VR 발전(?) 글 어디갔나요? [6] 인민 프로듀서9604 22/11/18 9604
167321 [질문] v3 백신 삭제가 안됩니다. [7] 김승남8012 22/11/18 8012
167320 [질문] 어디까지가 주식투자인지 궁금합니다. [21] 인생은아름다워8998 22/11/18 8998
167318 [삭제예정] PC견적 문의 드립니다 [8] 삭제됨9696 22/11/18 9696
167317 [질문] 소음이 적고 청소하기 편한 키보드 혹시 있을까요? [9] 보로미어10447 22/11/18 10447
167316 [질문] 아이폰 화면회전 질문 [6] 태연­9238 22/11/17 9238
167314 [질문] 갤럭시탭 S8 Ultra를 구매하려고 합니다. (구매방법 질문) [8] 카키스8142 22/11/17 8142
167313 [삭제예정] 어머니 겨울코트하나 선물해드리고 싶은데 [3] 삭제됨9183 22/11/17 9183
167312 [질문] 유게에 결혼식으로 장사하기 무슨글이죠? [10] 나른한오후11155 22/11/17 11155
167311 [질문] 원신 진행 상태 문의 드립니다! [8] 그림속동화8951 22/11/17 8951
167310 [질문] 스팀 업데이트 후 윈도우 키보드 마우스 먹통 증상 [2] Love.of.Tears.7131 22/11/17 7131
167309 [질문] 자녀 휴대폰 추천 부탁드립니다. [32] 먼산바라기10725 22/11/17 10725
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로