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안해도 될 것 같습니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
167986 [질문] 운전초보가 브레이크 조작 관련 질문폭탄 드립니다. [13] 아이폰12PRO11414 22/12/22 11414
167985 [질문] 민요 질문입니다. 경기서도민요 vs 남도민요 레슨 고민입니다. [2] 기술적트레이더9894 22/12/22 9894
167984 [질문] BL을 좋아하는 여성들의 심리를 알고싶습니다. [42] 한이연15336 22/12/22 15336
167983 [질문] 대출금을 갚을지 말지 고민이 됩니다. [22] 짱짱걸제시카10294 22/12/22 10294
167982 [질문] PS4 위쳐3 무료 업그레이드 질문입니다 [2] 회전목마10332 22/12/22 10332
167981 [질문] 휴대폰 바꾸려는데요 [16] wish buRn11841 22/12/22 11841
167980 [질문] 셀털글 삭제합니다. [86] 삭제됨12221 22/12/22 12221
167979 [질문] 웰치스 제로 너무 사기 아닌가요? [44] This-Plus13097 22/12/22 13097
167978 [질문] Nono라는 음악가 아십니까? [2] 니체10616 22/12/22 10616
167977 [질문] 제주 현지 날씨 궁금합니다. [4] 야호발동동씐나!!9952 22/12/22 9952
167976 [질문] 엑셀 고수님들 질문 있습니다 ㅠㅠ [9] 오렌지 태양 아래8841 22/12/22 8841
167975 [질문] 1월말일에 퇴사한다고 하고 연차 15일 모두 사용 가능한가요? [25] VictoryFood12885 22/12/22 12885
167974 [질문] 아주 저렴한 가성비 pc 추천 부탁 드려요. [9] 신촌로빈훗14519 22/12/22 14519
167973 [질문] 열혈강호 보고 싶습니다. 어디서 보나요? [10] 리얼월드10951 22/12/22 10951
167972 [질문] 예능에서 여자 탱커하면 누가 있을까요? [37] 샤르미에티미10283 22/12/21 10283
167971 [질문] 서울 24시간 국밥 맛집 [12] Avicii12670 22/12/21 12670
167970 [삭제예정] 마른비만 탈출 조언 부탁드립니다. [2] Rays8412 22/12/21 8412
167969 [질문] 컴퓨터 완본체 견적 질문드립니다 [10] funk10047 22/12/21 10047
167968 [질문] 어린이집 크리스마스 행사 옷 괜찮을까요..? [4] 제라스9233 22/12/21 9233
167967 [질문] 22년 자동차 보험인상이 있었나요? [6] Le_Ciel7139 22/12/21 7139
167966 [질문] 스마트폰 원격제어 승인없이 하는게 있을까요? [2] 바람의바람8024 22/12/21 8024
167965 [질문] 이미지 캡쳐 화질열화 관련 질문입니다 [2] 로각좁6550 22/12/21 6550
167964 [질문] 이직 문제 고민 [3] DoubleB8331 22/12/21 8331
목록 이전 다음
댓글

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