설문 조사 데이터베이스 디자인 : 사용자에게 답변을 연결


12

설문 조사 데이터베이스에 대한 개념적 모델을 수행하고 있습니다.

목표는 사용자가 제공 한 답변을 저장하는 것입니다 (Android 앱이 될 것입니다).

사용자, 질문 및 옵션의 세 가지 엔티티가 있습니다.

질문은 하나 개 이상의 옵션해야합니다 (예 : ? 할 얼마나 많은 직원, 당신은 1-40, 40-1000, 1000).

옵션 에는 텍스트 (1-40)와 값 (사용자가 선택한 값)이 있습니다.

사용자는 이러한 옵션 중 하나 이상을 선택합니다.

내 개념 설계는 다음과 같습니다

여기에 이미지 설명을 입력하십시오

답변을 사용자와 연결하는 방법을 모르겠습니다.

그 관계를 어떻게 표현할 수 있습니까?
옵션 값을 나타내는 다른 엔터티가 있습니까?

이 모델은 질문과 사전 답변 (제공된 답변)을 저장하고 다른 설문 조사에서 재사용 할 수 있습니다.

나는 이와 같은 질문을 대표해야합니다 :

여기에 이미지 설명을 입력하십시오

이 질문은이 질문과 관련이 있습니다 : 측량 데이터베이스 설계 : 첫 번째 버전. 오류가 있습니까?


1
사용자와 옵션 사이의 다 대다 관계를 처리하기 위해 다른 테이블이 필요한 것 같습니다.
OliverAsmus

답변:


7

가능한 답변과 선택한 답변을 구별해야 합니다.

Option표는 두 개의 테이블이 될 필요가있다. Option에 M : 표 1해야 Question하고 그 질문에 대한 가능한 답변을 포함해야한다.

그런 다음 새 교차 엔티티를 작성하고 와 Selected_Option사이에있는 엔티티를 호출해야합니다 .UserOption

질문에 따라 사용자가 답변으로 값을 입력 할 수있는 기회 (예 : "OTHER : ...")가 있으면이 값이 Selected_Option테이블에 저장됩니다 . 그렇지 않으면 사용자가 선택한 값이에있는 값이됩니다 Option.


편집하다:

OP의 요구 사항에 대한 설명을 기반으로 : 필요한 것은 다음과 같은 방식으로 일반적인 설문지 모델과 다릅니다.

  • 귀하의 질문은 모두 동일한 답변 (열)을 갖습니다.
  • 일부 답변 (열)이 그룹화되어 있습니다.
  • 질문 블록이 함께 그룹화됩니다.

양식 스냅 샷을 가이드로 삼아 양식의 요소를 색상으로 구분 된 엔티티로 나누었습니다.

색상 코드 양식 예

이것은 다음과 같은 논리적 ERD에 의해 수용 될 수 있습니다.

논리적 ERD

상관 관계를 보여주기 위해 샘플 양식의 스냅 샷과 일치하도록 ERD의 엔티티를 색상으로 코딩했습니다.

이 모델의 가정 중 하나는 각 블록에 블록 QUESTION_GROUP의 왼쪽 열에 해당하는 한 세트의 쿼리 (즉, 하나 ) 만 있다는 것입니다. 이것은 약간의 간단한 가정입니다.


나는 설문 조사 질문 이미지로 내 질문을 업데이트했습니다.
VansFannel

1
@VansFannel-편집 한 질문을 반영하여 답변을 업데이트했습니다.
Joel Brown

대단히 감사합니다! 당신은 저에게 많은 도움을주었습니다. dba.stackexchange.com/questions/16066/… 질문에 최종 디자인을 추가 했습니다. 원하는 경우 확인할 수 있습니다.
VansFannel

한 가지 질문 : "시퀀스"와 "값"은 무엇을 의미합니까? 나는 ERD (죄송합니다)와 많은 일을하지 않았습니다.
VansFannel

@VansFannel-ERD의 속성 노트는 테이블에서 사소하지 않은 열입니다. ID, FK, 설명 등을 어디에 넣을지 추측 sequence할 수 있습니다. 항목이 표시되는 순서를 제어 할 필요가 있음을 나타냅니다. 들어 value나는 사용자가 입력 한 값 (단지 옵션 선택)이 적합 할 수 있음을 지적하고있다.
Joel Brown

13

설문 데이터베이스 스키마.

이것은 수천 명의 사람들이 수행하는 진정한 고전입니다. 그들은 항상 '정말 단순'하게 보이지만 실제로는 꽤 복잡합니다. Rails에서이 작업을 수행하려면 첨부 된 다이어그램에 표시된 모델을 사용하십시오. 나는 그것이 다소 복잡해 보일 것이라고 확신하지만, 몇 년 동안 이들 중 몇 가지를 구축하면 대부분의 디자인 결정은 매우 고전적인 패턴이며 시초.
자세한 내용은 아래를 참조하십시오.

여기에 이미지 설명을 입력하십시오

키 테이블의 테이블 세부 사항

대답

답변의 는 사용자가 실제 응답을 캡처 표는 중요하다. 답변은 질문 이 아니라 question_options에 대한 링크 입니다. 이것은 의도적 인 것입니다.

input_types

input_types 는 질문 유형입니다. 각 질문은 1 가지 유형, 예를 들어 모든 라디오 다이얼, 모든 텍스트 필드 등일 수 있습니다. 5 개의 라디오 다이얼과 "포함?"에 대한 1 개의 확인란이있는 경우 추가 질문을 사용하십시오. 옵션 또는 이러한 조합. 사용자보기의 두 질문에 하나의 레이블을 지정하지만 내부에는 두 가지 질문이 있습니다. 하나는 라디오 다이얼, 하나는 확인란입니다. 이 경우 확인란에는 1 그룹이 있습니다.

option_groups

option_groupsoption_choices 를 사용하면 '공통'그룹을 만들 수 있습니다. 예를 들어, 부동산 응용 프로그램에는 '재산이 몇 살입니까?'라는 질문이있을 수 있습니다. 다음 범위에서 답을 원할 수 있습니다. 1-5 6-10 10-25 25-100 100+

예를 들어 인접한 부동산 연령에 대한 질문이있는 경우 설문 조사는 위의 범위를 '재사용'하여 동일한 option_group 및 옵션이 사용되도록합니다.

측정 단위

units_of_measure 는 들리는대로입니다. 인치, 컵, 픽셀, 벽돌 등 무엇이든 여기에서 한 번 정의 할 수 있습니다.

참고 : 본질적으로 일반적이지만,이 위에 애플리케이션을 작성할 수 있으며이 스키마는 각 테이블의 기본 키에 대해 "id"와 같은 규칙 을 사용하여 Ruby On Rails 프레임 워크에 적합 합니다. 또한 관계는 many_to_many 또는 has_many 스루가 필요없는 단순한 one_to_many입니다. 아마 has_many : throughs 및 / 또는 : delegates를 추가하여 다중 체인을 사용하지 않고도 개별 답변에서 쉽게 Survey_name과 같은 것을 얻을 수 있습니다.


큰! 답변 주셔서 감사합니다. 나는 그것을 많이 배울 것입니다. 감사합니다.
VansFannel

좋은 대답입니다. 지금 비슷한 디자인 문제와 싸우고 있기 때문에 매우 유용합니다. :)
Dr. Mike

이것이 정답이었습니다. 매우 도움이되었습니다. 감사합니다!
dsignr

@Michael "답변은 질문이 아니라 question_options에 대한 링크입니다. 이것은 의도적 인 것입니다." 이유에 대한 추가 설명을 제공해 주시겠습니까? :)
Pak

@Michael 안녕하세요, 좋은 답변입니다! HTML 페이지에서 일부 질문의 CSS를 사용자 정의 할 수 있어야한다면 어떻게해야합니까? 회사 테이블에 CssFile 속성을 만들었지 만 질문 수준에서 더 구체적이어야합니다. 감사.
Patrick

2

이 일반적인 아이디어를 살펴보십시오.

여기에 이미지 설명을 입력하십시오

간결성을 위해 위의 모델에는 가장 필수 필드 만 포함되어 있습니다.

이 모델에는 다음과 같은 특징이 있습니다.

  • 하나의 질문은 여러 설문 조사간에 공유 될 수 있습니다 (물론 단일 설문 조사는 여러 질문을 포함 할 수 있음). SURVEY_QUESTION은이 M : N 관계를 구현하는 "링크"테이블입니다.
  • 설문 조사의 질문 순서는 SURVEY_QUESTION.QUESTION_NO에 의해 결정됩니다. {SURVEY_NO, QUESTION_NO}는 U1위의 다이어그램에 표시된 (대체) 키이므로 동일한 설문에서 두 개의 질문이 동일한 "슬롯"을 차지할 수 없습니다. 다른 설문 조사는 다른 순서로 동일한 질문을 가질 수 있습니다.
  • 각 질문에는 일련의 가능한 답변 또는 "옵션"이 있습니다. 옵션의 시각적 순서는 OPTION.OPTION_NO에 의해 결정되며, PK에 있으므로 두 개의 옵션이 동일한 질문에서 동일한 "슬롯"을 차지할 수 없습니다.
  • 서로 다른 사용자가 동일한 질문에 대해 다른 답변을 제공 할 수 있습니다 (물론 한 사용자가 여러 질문에 답변 할 수도 있음). 이 M : N 관계는 "링크"테이블 ANSWER를 통해 구현됩니다.
  • 사용자 는 옵션 중 하나 를 선택하여 질문에 대답합니다 . 이는 ANSWER의 PK에서 OPTION_NO를 제외 함으로써 보장됩니다 . 사용자가 여러 옵션을 선택할 수있게하려면 PK에 OPTION_NO를 포함하십시오.

이 데이터 모델에는 사용자가 모든 질문 에 대답하도록 강요하는 것이 없습니다 . 이는 응용 프로그램 수준에서 수행해야 할 작업입니다. 그럼에도 불구하고,이 모델은 당신이해야 할 일을 시작하기에 좋은 출발점이되어야합니다 ...


나는 설문 조사 질문 이미지로 내 질문을 업데이트했습니다.
VansFannel

1

사용자의 답변을 유지하려면 다른 테이블이 필요합니다.

user_answers
------------
  user_answer_id-고유 기본 키
  user_id-FK 대 사용자 테이블
  chosen_option_id-FK에서 옵션 테이블
  question_id-질문 테이블에 FK

사용자가 옵션으로 "기타"를 선택하고 자체 값을 입력하도록하려면 별도의 테이블을 사용하는 것이 좋습니다.

user_alt_answers
----------------
  user_alt_answer_id-PK
  alt_answer_text-사용자가 "기타"옵션으로 입력 한 텍스트
  user_answeR_id-user_answers 테이블에 대한 FK

나는 설문 조사 질문 이미지로 내 질문을 업데이트했습니다.
VansFannel

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.