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안해도 될 것 같습니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
164411 [질문] 문명6을 샀는데, 공략 참고나 정보에 대해 알 수 있는 곳이 있을까요? [15] nekorean7384 22/06/23 7384
164409 [질문] 탈모 막거나 회복하는 방법 어떤 게 좋은지요..? [9] nexon5704 22/06/23 5704
164408 [질문] 웹페이지 DB 계획하는 데 질문드립니다 [11] 멋진신세계4196 22/06/23 4196
164406 [질문] 특정페이지만 화면이 밝아집니다. [3] 쏘군3522 22/06/23 3522
164405 [삭제예정] . [2] 삭제됨4989 22/06/23 4989
164404 [질문] CPU 서멀 구리스 재도포 해야 할까요? [13] 카페알파9378 22/06/23 9378
164403 [질문] 축구 2010년 월드컵 국대에 지금의 손흥민이 있었다면? [15] 웬디4992 22/06/23 4992
164402 [질문] 갤럭시 예약된 시간에 전화 걸기 [4] 아가인7241 22/06/23 7241
164401 [질문] 부모님 할만한 일 무엇이 있을까요? [19] 교자만두5063 22/06/23 5063
164400 [질문] 용산 전쟁기념관 밤에 산책가능한가요? [6] 분당선3387 22/06/23 3387
164399 [질문] 개발자에서 PL로... 참고할만한 책이나 자료? [7] 허저비4283 22/06/23 4283
164398 [질문] 온도 측정장비 문의 (작은 물건) [4] 아르거스의사도3808 22/06/23 3808
164396 [질문] 맥스튜디오와 맥북 동시에 사용하는 분 계신가요? [2] 니체4073 22/06/23 4073
164395 [질문] 운동중 체지방 컷의 적절한 시기 질문입니다! [5] 숴비3497 22/06/23 3497
164394 [질문] 눈 한쪽에만 쌍꺼풀이 갑자기 생겼어요 [20] 보름달이뜨는밤에4238 22/06/23 4238
164393 [질문] 안드로이드 음악, 영상재생 어플 추천받습니다 [7] 리니시아4903 22/06/23 4903
164392 [질문] 핸드폰으로 NCSOFT 인증문자가 갑자기 날라오네요 [3] AsuRa6166 22/06/23 6166
164391 [질문] 서른에 월 보험비 17만원 내는데 맞는건가요?(보험 내용첨부) [7] 푸끆이6020 22/06/22 6020
164390 [질문] 퇴사할 때 뭐라고 말해야 좋을까요? [25] 검정머리외국인9291 22/06/22 9291
164389 [질문] 웨딩홀 폐업으로 인한 계약 해지 [6] 히로미4619 22/06/22 4619
164388 [질문] 3시간 전까지 잘 인식되던 SD카드 뭐가 문제 일까요? [5] 김창평3747 22/06/22 3747
164387 [질문] 삭제합니다. [6] 삭제됨4764 22/06/22 4764
164386 [질문] 구로에서 출퇴근 괜찮은 동네가 어딨을까요? [10] SaRangE4145 22/06/22 4145
목록 이전 다음
댓글

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