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안해도 될 것 같습니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
164430 [질문] 같은 uhd모니터인데 작은 모니터가 더 비싼건 왜일까요? [14] 쿄우가4570 22/06/24 4570
164429 [질문] 와이프랑 같이 10km를 걸었는데요 뭔가 이상해서요 [22] 시오냥9415 22/06/24 9415
164428 [질문] 집을 나가는게 먼저인가요 보증금을 받는게 먼저인가요? [13] 구미나5198 22/06/24 5198
164427 [질문] 아이들 영어 과외 찾는 법 [4] 니플4611 22/06/24 4611
164426 [질문] 외국어 입력 언어 단축키 문제입니다. [3] 허성민4013 22/06/24 4013
164425 [질문] 우마무스메에 관한 질문 몇가지 드립니다 ! [7] 안다리엘6505 22/06/24 6505
164424 [삭제예정] 금융계열 헤드헌팅 플랫폼은 어디가 좋은가요? [6] 꿀행성6096 22/06/24 6096
164423 [질문] 원하지 않은 보험 전화가 잊을만하면 자꾸 옵니다. [12] 애플댄스5296 22/06/24 5296
164422 [질문] 네이버 롤 승부예측 질문 [5] Deco5389 22/06/24 5389
164421 [질문] 요즘에는 출국 몇시간 전에 공항 도착하면 될까요? [7] 농심신라면6240 22/06/24 6240
164420 [질문] 거북목이랑 허리 교정하는 밴드, 배게 등 혹시 관련 제품이 있을까요? [2] 요한나3798 22/06/24 3798
164419 [질문] 싱글플레이 재밌는 레인보우식스 시리즈 추천부탁드립니다. [1] Gotetz3769 22/06/24 3769
164418 [질문] 제가 짜증날만한 상황이 맞나요? [23] Just do it5751 22/06/24 5751
164417 [질문] q-dir 사용시 미표시 아이콘 [2] 어센틱3434 22/06/24 3434
164416 [질문] 대변 후 몸무게 변화에 대한 학술적 자료? [6] 시라노 번스타인4363 22/06/24 4363
164415 [삭제예정] 문서작성용 가성비 좋은 노트북을 구매하려 합니다. 중고 또는 리퍼제품을 찾으면 될까요? [2] 삭제됨5493 22/06/24 5493
164414 [질문] 취침전 반신욕 [6] poocang2731 22/06/24 2731
164413 [질문] 144hz 모니터에 100hz [7] 한기4580 22/06/24 4580
164412 [질문] 아버지 칠순 잔치 장소 문의 및 추천 부탁 드립니다. 수타군3237 22/06/24 3237
164411 [질문] 문명6을 샀는데, 공략 참고나 정보에 대해 알 수 있는 곳이 있을까요? [15] nekorean7382 22/06/23 7382
164409 [질문] 탈모 막거나 회복하는 방법 어떤 게 좋은지요..? [9] nexon5703 22/06/23 5703
164408 [질문] 웹페이지 DB 계획하는 데 질문드립니다 [11] 멋진신세계4194 22/06/23 4194
164406 [질문] 특정페이지만 화면이 밝아집니다. [3] 쏘군3520 22/06/23 3520
목록 이전 다음
댓글

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