- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
database modeling 설문 조사를위한 데이터베이스 설계
2020.09.05 20:35
설문 조사를위한 데이터베이스 설계
답변이 데이터베이스에 저장된 설문 조사를 작성해야합니다. 데이터베이스, 특히 필요한 테이블에서이를 구현하는 가장 좋은 방법이 무엇인지 궁금합니다. 설문 조사에는 여러 유형의 질문이 포함되어 있습니다. 예를 들면 다음과 같습니다. 설명을위한 텍스트 필드, 객관식 질문 및 둘 이상의 답변을 포함 할 수있는 질문 (예 : 해당되는 모든 항목 확인).
두 가지 가능한 솔루션을 생각해 냈습니다.
-
각 설문 제출에 대한 답변이 포함 된 거대한 테이블을 만듭니다. 각 열은 설문 조사의 답변에 해당합니다. 즉, SurveyID, Answer1, Answer2, Answer3
이 설문 조사에 많은 질문이 있기 때문에 이것이 최선의 방법이라고 생각하지 않으며 설문 조사가 변경 될 경우 매우 유연하지 않은 것으로 보입니다.
-
내가 생각한 다른 것은 질문 테이블과 답변 테이블을 만드는 것이 었습니다. 질문 테이블에는 설문에 대한 모든 질문이 포함됩니다. 답변 표에는 설문 조사의 개별 답변이 포함되며 각 행은 질문에 연결됩니다.
간단한 예 :
tblSurvey : SurveyID
tblQuestion : QuestionID, SurveyID , QuestionType, 질문
tblAnswer : AnswerID, UserID , QuestionID , 대답
tblUser : 사용자 ID, 사용자 이름
이것에 대한 나의 문제는 답변 테이블이 상당히 거대하게 만드는 많은 답변이있을 수 있다는 것입니다. 성능면에서 그렇게 큰지 잘 모르겠습니다.
나는 어떤 아이디어 나 제안에 감사드립니다.
모델 # 2는 훌륭하지만 질문과 사전 답변 (제공된 답변)을 저장하고 다른 설문 조사에서 재사용 할 수있는 더 복잡한 모델을 살펴볼 수 있습니다.
-한 설문 조사에는 많은 질문이있을 수 있습니다. 하나의 질문은 많은 설문 조사에서 (재) 사용될 수 있습니다.
-많은 질문에 대해 하나의 (사전 제작 된) 답변을 제공 할 수 있습니다. 하나의 질문에는 많은 답변이 제공 될 수 있습니다. 질문은 다른 설문 조사에서 다른 답변을 제공 할 수 있습니다. 설문 조사마다 다른 질문에 대한 답변을 제공 할 수 있습니다. 기본 "기타"답변이 있습니다. 사람이 다른 것을 선택하면 답변이 Answer.OtherText에 기록됩니다.
-한 사람은 많은 설문 조사에 참여할 수 있으며 한 사람은 설문 조사의 특정 질문에 한 번만 답변 할 수 있습니다.
내 디자인은 아래와 같습니다.
최신 작성 스크립트는 https://Gist.github.com/durrantm/1e618164fd4acf91e372 에 있습니다.
스크립트와 mysql workbench.mwb 파일은
https://github.com/durrantm/survey
확실히 옵션 # 2, 또한 현재 스키마를 감독 할 수 있다고 생각하면 다른 테이블을 원할 수 있습니다.
+-----------+
| tblSurvey |
|-----------|
| SurveyId |
+-----------+
+--------------+
| tblQuestion |
|--------------|
| QuestionID |
| SurveyID |
| QuestionType |
| Question |
+--------------+
+--------------+
| tblAnswer |
|--------------|
| AnswerID |
| QuestionID |
| Answer |
+--------------+
+------------------+
| tblUsersAnswer |
|------------------|
| UserAnswerID |
| AnswerID |
| UserID |
| Response |
+------------------+
+-----------+
| tblUser |
|-----------|
| UserID |
| UserName |
+-----------+
각 질문에는 아마도 사용자가 선택할 수있는 정해진 수의 답변이있을 것이며 실제 답변은 다른 표에서 추적 될 것입니다.
데이터베이스는 많은 데이터를 저장하도록 설계되었으며 대부분 확장 성이 뛰어납니다. 더 이상 공간을 절약하기 위해 더 적은 일반 형식 을 실제로 사용할 필요는 없습니다.
일반적으로 사용자가 변경할 수있는 내용 (예 : 설문 조사에 질문 추가)을 기반으로 스키마를 수정하는 것은 상당히 냄새 나는 것으로 간주해야합니다. 특히 많은 양의 데이터를 처리 할 때 적절할 수있는 경우가 있지만 다이빙하기 전에 어떤 정보가 나오는지 알고 있습니다. 각 설문 조사에 대해 "응답"표만 있으면 질문을 추가하거나 제거하는 데 많은 비용이 소요될 수 있습니다 질문에 무관하게 분석하는 것은 매우 어렵습니다.
두 번째 접근 방식이 가장 좋다고 생각하지만 규모가 크게 우려되는 경우 과거에 저에게 도움이 된 것은 하이브리드 접근 방식입니다.
- 2에서 설명한대로 질문 당 응답을 저장하기위한 자세한 응답 테이블을 작성하십시오.이 데이터는 일반적으로 애플리케이션에서 직접 쿼리되지 않지만보고 테이블에 대한 요약 데이터를 생성하는 데 사용됩니다. 이 데이터에 대해 보관 또는 정리 형식을 구현하고 싶을 수도 있습니다.
- 필요한 경우 1에서 응답 테이블을 작성하십시오. 사용자가 결과에 대한 간단한 표를보고 싶을 때마다 사용할 수 있습니다.
- 보고 목적으로 수행해야하는 모든 분석의 경우 1의 데이터를 기반으로 추가 요약 데이터를 작성하도록 작업을 예약하십시오.
이것은 구현하기 위해 훨씬 더 많은 작업 이므로이 테이블이 대규모의 우려에 부딪 칠 것이라는 것을 확신하지 않는 한 실제로 조언하지는 않습니다.
2는 괜찮아 보입니다.
열이 4 개만있는 테이블의 경우 수백만 개의 행이 있어도 문제가되지 않습니다. 물론 이것은 사용중인 데이터베이스에 따라 달라질 수 있습니다. SQL Server와 같은 것이면 문제가되지 않습니다.
TblAnswer 테이블의 QuestionID 필드에 색인을 작성하려고합니다.
물론, 사용중인 데이터베이스와 예상 볼륨을 지정해야합니다.
두 번째 방법이 가장 좋습니다.
더 표준화하려면 질문 유형에 대한 테이블을 만들 수 있습니다.
해야 할 간단한 일은 :
- 데이터베이스를 배치하고 기본값으로 모두 C가 아닌 자체 디스크에 로그온
- 데이터베이스가 커지는 동안 일시 정지하지 않도록 필요한만큼 데이터베이스를 작성하십시오.
우리는 SQL Server Table에 수천만 개의 행을 가진 로그 테이블을 가지고 있습니다.
간단한 설문 조사를 위해 매우 완벽하게 보입니다. 고객이 텍스트 상자를 통해 의견을 제공 할 수있는 '공개 가치'에 대한 표를 추가하는 것을 잊지 마십시오. 외래 키를 사용하여 해당 테이블을 답변에 연결하고 성능을 위해 모든 관계형 열에 인덱스를 배치하십시오.
2 번이 맞습니다. 성능 문제가 감지 될 때까지는 정확한 설계를 사용하십시오. 대부분의 RDBMS는 좁지 만 매우 긴 테이블에는 문제가 없습니다.
자체적으로 큰 응답 테이블을 갖는 것은 문제가되지 않습니다. 인덱스와 제약 조건이 잘 정의되어 있으면 괜찮을 것입니다. 두 번째 스키마는 나에게 좋아 보인다.
적절한 색인이 제공되면 두 번째 솔루션이 정규화되어 기존 관계형 데이터베이스 시스템에 적합합니다.
나는 얼마나 큰지 알지 못하지만 문제없이 몇 백만의 대답을 유지해야합니다.
[출처] https://www.it-swarm.dev/ko/sql/%EC%84%A4%EB%AC%B8-%EC%A1%B0%EC%82%AC%EB%A5%BC%EC%9C%84%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%84%A4%EA%B3%84/968974555/
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 오라클 기본 샘플 데이터베이스 | 졸리운_곰 | 2014.01.02 | 86125 |
| 공지 | [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE | 가을의 곰을... | 2013.02.10 | 78629 |
| 공지 | [G_SQL] Sample Database | 가을의 곰을... | 2012.05.20 | 95345 |
| 13 |
[데이터 수집 및 전처리] 주식 전종목 어떻게 불러올까? 거래소 종목 불러오기
| 졸리운_곰 | 2023.12.09 | 1701 |
| 12 |
[데이터 수집 및 전처리] [Python/파이썬]네이버증권API 활용 - 회사명, 종목코드 받아오기
| 졸리운_곰 | 2023.12.08 | 1509 |
| 11 |
[데이터 수집 및 전처리] 네이버 금융(차트)에서 주가 갈무리(크롤링)하기
| 졸리운_곰 | 2023.12.08 | 1495 |
| 10 |
[데이터 수집 및 전처리] 네이버 증권에서 일봉, 주봉 데이터 가져오기
| 졸리운_곰 | 2023.12.08 | 1499 |
| 9 |
[데이터 수집 및 전처리] (놀라운) 한글 데이터 짱! AwesomeKorean_Data
| 졸리운_곰 | 2023.03.07 | 1197 |
| 8 |
[데이터 수집 및 전처리] Crawling, Scraping
| 졸리운_곰 | 2022.05.21 | 1476 |
| 7 |
[데이터분석][데이터수집 전처리] MS 엑셀(Excel)에서 UTF-8 로 된 csv 파일 가져오기
| 졸리운_곰 | 2021.09.30 | 1415 |
| 6 | 카프카 설치 시 가장 중요한 설정 4가지 | 졸리운_곰 | 2021.07.13 | 1925 |
| 5 |
Prometheus Query(PromQL) 기본 이해하기
| 졸리운_곰 | 2020.12.17 | 1413 |
| 4 |
[인프라 모니터링 오픈소스] Prometheus 를 알아보자
| 졸리운_곰 | 2020.12.17 | 1906 |
| 3 |
Prometheus + Grafana 대시보드
| 졸리운_곰 | 2020.12.17 | 2488 |
| 2 |
Grafana란?
| 졸리운_곰 | 2020.12.17 | 2158 |
| 1 | Importing wikipedia dump to MySql | 졸리운_곰 | 2020.10.04 | 2494 |


