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안해도 될 것 같습니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
164463 [질문] 우마무스메 질문 [7] ELESIS6656 22/06/26 6656
164462 [질문] 삼성페이 잠금화면 설정하지 않고 사용하는 방법이 있을까요? [12] kafka8985 22/06/26 8985
164461 [질문] 스니커와 발 피로도 문제 [6] 葡萄美酒月光杯6581 22/06/26 6581
164459 [질문] 마우스패드 추천 부탁드립니다. [4] 미뉴잇4397 22/06/26 4397
164458 [삭제예정] 결혼하고 혼인신고 안했으면 이력서에 뭐라고 체크해야 되나요? [9] 니시무라 호노카7579 22/06/26 7579
164457 [질문] 자전거 구입질문 [5] 삭제됨4917 22/06/26 4917
164456 [질문] 오류로 티켓몬스터 사이트를 이용할 수가 없습니다. [11] 어제내린비5330 22/06/26 5330
164455 [질문] 노트북 추천 부탁드립니다 [2] kaerans5240 22/06/26 5240
164454 [질문] 사무용으로 쓸만한 무선마우스 추천부탁드립니다. [13] 유니꽃6736 22/06/26 6736
164453 [질문] 해외직구용 신용카드 추천 부탁드립니다 [1] Arya Stark5212 22/06/26 5212
164452 [질문] 무선인터넷 끊김 관련 문제 [10] 여기에텍스트입력7353 22/06/26 7353
164451 [질문] 콘솔 기종 선택 문의드립니다. [12] 인간성승헌6381 22/06/26 6381
164450 [질문] 무선청소기 + 로봇 청소기 어디께 좋나요? [7] LeNTE6760 22/06/26 6760
164449 [질문] [마지막 휴가] 스팀 여름 할인 (+ 무엇이라도) 게임 추천 부탁드립니다 [26] JJ.Persona10169 22/06/25 10169
164448 [질문] 주식계좌에서 입금합계-출금합계보다 자산평가가 높게 나올수가 있나요? [5] 산딸기먹자6151 22/06/25 6151
164447 [질문] 지금봐도 재미있을 옛날 국내 명작 드라마에는 어떤게 있을까요? [20] 레너블6511 22/06/25 6511
164446 [질문] 청소기 선물 질문 [1] 삭제됨4721 22/06/25 4721
164445 [질문] 서해쪽 리조트(펜션) 질문드립니다. [10] 쉬군4794 22/06/25 4794
164444 [질문] 아이마스 스탈릿 시즌을 살라고 그러는데요 [3] 及時雨6181 22/06/25 6181
164443 [삭제예정] 삭제합니다 [7] 삭제됨7653 22/06/25 7653
164442 [질문] [유튜브] 15~20분 콘텐츠 추천 받습니다. [13] 연애잘합니다6847 22/06/25 6847
164441 [질문] 에픽 무료배포 게임 중 추천할만한 게임 알려주세요! [18] 나혼자만레벨업7842 22/06/25 7842
164440 [질문] 외화예수금은 거래일 후 몇일 후에야 인출 가능한가요? [1] 산딸기먹자5011 22/06/25 5011
목록 이전 다음
댓글

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