설문 조사를위한 데이터베이스 설계

답변이 데이터베이스에 저장된 설문 조사를 작성해야합니다. 데이터베이스, 특히 필요한 테이블에서이를 구현하는 가장 좋은 방법이 무엇인지 궁금합니다. 설문 조사에는 여러 유형의 질문이 포함되어 있습니다. 예를 들면 다음과 같습니다. 설명을위한 텍스트 필드, 객관식 질문 및 둘 이상의 답변을 포함 할 수있는 질문 (예 : 해당되는 모든 항목 확인).

두 가지 가능한 솔루션을 생각해 냈습니다.

  1. 각 설문 제출에 대한 답변이 포함 된 거대한 테이블을 만듭니다. 각 열은 설문 조사의 답변에 해당합니다. 즉, SurveyID, Answer1, Answer2, Answer3

    이 설문 조사에 많은 질문이 있기 때문에 이것이 최선의 방법이라고 생각하지 않으며 설문 조사가 변경 될 경우 매우 유연하지 않은 것으로 보입니다.

  2. 내가 생각한 다른 것은 질문 테이블과 답변 테이블을 만드는 것이 었습니다. 질문 테이블에는 설문에 대한 모든 질문이 포함됩니다. 답변 표에는 설문 조사의 개별 답변이 포함되며 각 행은 질문에 연결됩니다.

    간단한 예 :

    tblSurvey : SurveyID

    tblQuestion : QuestionID, SurveyID , QuestionType, 질문

    tblAnswer : AnswerID, UserID QuestionID , 대답

    tblUser : 사용자 ID, 사용자 이름

    이것에 대한 나의 문제는 답변 테이블이 상당히 거대하게 만드는 많은 답변이있을 수 있다는 것입니다. 성능면에서 그렇게 큰지 잘 모르겠습니다.

나는 어떤 아이디어 나 제안에 감사드립니다.

 

모델 # 2는 훌륭하지만 질문과 사전 답변 (제공된 답변)을 저장하고 다른 설문 조사에서 재사용 할 수있는 더 복잡한 모델을 살펴볼 수 있습니다.

-한 설문 조사에는 많은 질문이있을 수 있습니다. 하나의 질문은 많은 설문 조사에서 (재) 사용될 수 있습니다.
-많은 질문에 대해 하나의 (사전 제작 된) 답변을 제공 할 수 있습니다. 하나의 질문에는 많은 답변이 제공 될 수 있습니다. 질문은 다른 설문 조사에서 다른 답변을 제공 할 수 있습니다. 설문 조사마다 다른 질문에 대한 답변을 제공 할 수 있습니다. 기본 "기타"답변이 있습니다. 사람이 다른 것을 선택하면 답변이 Answer.OtherText에 기록됩니다.
-한 사람은 많은 설문 조사에 참여할 수 있으며 한 사람은 설문 조사의 특정 질문에 한 번만 답변 할 수 있습니다.
 

survey_model_02

 113
 

내 디자인은 아래와 같습니다.

최신 작성 스크립트는 https://Gist.github.com/durrantm/1e618164fd4acf91e372 에 있습니다.

스크립트와 mysql workbench.mwb 파일은
https://github.com/durrantm/surveyenter image description here

 49
Michael Durrant

확실히 옵션 # 2, 또한 현재 스키마를 감독 할 수 있다고 생각하면 다른 테이블을 원할 수 있습니다.

+-----------+
| tblSurvey |
|-----------|
| SurveyId  |
+-----------+

+--------------+
| tblQuestion  |
|--------------|
| QuestionID   |
| SurveyID     |
| QuestionType |
| Question     |
+--------------+

+--------------+
| tblAnswer    |
|--------------|
| AnswerID     |
| QuestionID   |
| Answer       |
+--------------+

+------------------+
| tblUsersAnswer   |
|------------------|
| UserAnswerID     |
| AnswerID         |
| UserID           |
| Response         |
+------------------+

+-----------+
| tblUser   |
|-----------|
| UserID    |
| UserName  |
+-----------+

각 질문에는 아마도 사용자가 선택할 수있는 정해진 수의 답변이있을 것이며 실제 답변은 다른 표에서 추적 될 것입니다.

데이터베이스는 많은 데이터를 저장하도록 설계되었으며 대부분 확장 성이 뛰어납니다. 더 이상 공간을 절약하기 위해 더 적은 일반 형식 을 실제로 사용할 필요는 없습니다.

 17
tplaner

일반적으로 사용자가 변경할 수있는 내용 (예 : 설문 조사에 질문 추가)을 기반으로 스키마를 수정하는 것은 상당히 냄새 나는 것으로 간주해야합니다. 특히 많은 양의 데이터를 처리 할 때 적절할 수있는 경우가 있지만 다이빙하기 전에 어떤 정보가 나오는지 알고 있습니다. 각 설문 조사에 대해 "응답"표만 있으면 질문을 추가하거나 제거하는 데 많은 비용이 소요될 수 있습니다 질문에 무관하게 분석하는 것은 매우 어렵습니다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

두 번째 접근 방식이 가장 좋다고 생각하지만 규모가 크게 우려되는 경우 과거에 저에게 도움이 된 것은 하이브리드 접근 방식입니다.

  1. 2에서 설명한대로 질문 당 응답을 저장하기위한 자세한 응답 테이블을 작성하십시오.이 데이터는 일반적으로 애플리케이션에서 직접 쿼리되지 않지만보고 테이블에 대한 요약 데이터를 생성하는 데 사용됩니다. 이 데이터에 대해 보관 또는 정리 형식을 구현하고 싶을 수도 있습니다.
  2. 필요한 경우 1에서 응답 테이블을 작성하십시오. 사용자가 결과에 대한 간단한 표를보고 싶을 때마다 사용할 수 있습니다.
  3. 보고 목적으로 수행해야하는 모든 분석의 경우 1의 데이터를 기반으로 추가 요약 데이터를 작성하도록 작업을 예약하십시오.

이것은 구현하기 위해 훨씬 더 많은 작업 이므로이 테이블이 대규모의 우려에 부딪 칠 것이라는 것을 확신하지 않는 한 실제로 조언하지는 않습니다.

 3
Ryan Brunner

2는 괜찮아 보입니다.

열이 4 개만있는 테이블의 경우 수백만 개의 행이 있어도 문제가되지 않습니다. 물론 이것은 사용중인 데이터베이스에 따라 달라질 수 있습니다. SQL Server와 같은 것이면 문제가되지 않습니다.

TblAnswer 테이블의 QuestionID 필드에 색인을 작성하려고합니다.

물론, 사용중인 데이터베이스와 예상 볼륨을 지정해야합니다.

 

두 번째 방법이 가장 좋습니다.

더 표준화하려면 질문 유형에 대한 테이블을 만들 수 있습니다.

해야 할 간단한 일은 :

  • 데이터베이스를 배치하고 기본값으로 모두 C가 아닌 자체 디스크에 로그온
  • 데이터베이스가 커지는 동안 일시 정지하지 않도록 필요한만큼 데이터베이스를 작성하십시오.

우리는 SQL Server Table에 수천만 개의 행을 가진 로그 테이블을 가지고 있습니다.

 1
Shiraz Bhaiji

간단한 설문 조사를 위해 매우 완벽하게 보입니다. 고객이 텍스트 상자를 통해 의견을 제공 할 수있는 '공개 가치'에 대한 표를 추가하는 것을 잊지 마십시오. 외래 키를 사용하여 해당 테이블을 답변에 연결하고 성능을 위해 모든 관계형 열에 인덱스를 배치하십시오.

 0
Ben

2 번이 맞습니다. 성능 문제가 감지 될 때까지는 정확한 설계를 사용하십시오. 대부분의 RDBMS는 좁지 만 매우 긴 테이블에는 문제가 없습니다.

 0
Larry Lustig

자체적으로 큰 응답 테이블을 갖는 것은 문제가되지 않습니다. 인덱스와 제약 조건이 잘 정의되어 있으면 괜찮을 것입니다. 두 번째 스키마는 나에게 좋아 보인다.

 0
Dave Swersky

적절한 색인이 제공되면 두 번째 솔루션이 정규화되어 기존 관계형 데이터베이스 시스템에 적합합니다.

나는 얼마나 큰지 알지 못하지만 문제없이 몇 백만의 대답을 유지해야합니다.

 0
 

 

[출처] 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/

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86143
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78639
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95368
131 [Oracle] sysdate와 systimestamp 정리 및 예제 졸리운_곰 2020.11.12 1915
130 오라클 sysdate 샘플 쿼리 (sysdate - 1) (sysdate - 1/24)의 의미 졸리운_곰 2020.11.12 1412
129 [Oracle] 오라클 EXISTS, NOT EXISTS 사용법 정리 (IN, JOIN 비교) file 졸리운_곰 2020.11.10 2424
128 [오라클, oracle] ORA-00926:missing VALUES keyword 오류 졸리운_곰 2020.11.07 1797
127 [oracle] [오라클] SUBSTR, SUBSTRB 함수 사용방법 (문자열, 자르기, 바이트, Left) file 졸리운_곰 2020.11.07 1524
126 [Oracle] ORA-00917: 누락된 콤마 졸리운_곰 2020.11.07 1638
125 [oracle] 오라클 MOD 함수(나머지 구하기 함수, 초를 분으로 변경) 졸리운_곰 2020.11.07 1165
124 [몽고디비 mongodb] 몽고디비에서 벌크 오퍼려이션과 배열 삽입의 차이점은 what is the difference between bulk insert and array insert in Mongo db operations 졸리운_곰 2020.10.09 1256
123 [oracle] 성능 향상을 위한 다중 로우 처리 졸리운_곰 2020.10.09 1235
122 BULK SQL 사용예 졸리운_곰 2020.10.09 1558
121 Oracle :: MERGE INTO 졸리운_곰 2020.09.10 1558
120 오라클 MERGE INTO - 한번에 INSERT, UPDATE 하기 졸리운_곰 2020.09.10 1191
119 Oracle Merge 명령어 사용 file 졸리운_곰 2020.09.10 1320
118 [오라클] ORA-01476 제수가 0 입니다 졸리운_곰 2020.07.22 2078
117 다중 with문 사용 - ORACLE SQL | [PL]SQL 졸리운_곰 2020.06.28 1639
116 여러 개의 INSERT문을 한 번에 처리 졸리운_곰 2020.06.28 1230
115 [Oracle] 오라클 WITH절 사용법 & 예제 (임시 테이블 만들기) file 졸리운_곰 2020.06.28 1333
114 [oracle] WITH 구문 file 졸리운_곰 2020.06.28 1393
113 [Oracle] WITH 구문 예제 file 졸리운_곰 2020.06.28 3258
112 [oracle]오라클 group by, rollup file 졸리운_곰 2020.06.28 1173
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED