설문지 데이터베이스 디자인-어떤 방법이 더 낫습니까?


15

하나의 긴 html 페이지가 있고 여러 질문 세트가 작은 섹션 (한 페이지에 약 15 개의 하위 섹션)으로 나뉘어져 있으며 총 질문 수는 약 100 개의 질문입니다. 입력, 객관식 선택, 확인란, 라디오 버튼, 텍스트 영역, 파일 업로드. 하나의 질문에는 확인란 그룹, 선택 목록 그룹, 다중 선택 그룹 또는 모두 하나의 답변으로 결합 된 많은 답변이 포함될 수 있습니다. 나는이 데이터베이스 디자인을 아래에서 사용할 것이라고 생각했지만 결국 좋은 접근 방법이 아니라는 것을 최근에 알게되었습니다.

  1. 한 고객은 한 질문 세트 만 가질 수 있습니다 (100 질문 당 한 고객).
  2. 오래된 접근법의 경우 데이터베이스에 질문을하지 않고 대신 PHP 코딩에서 상수로 할당합니다. 문제는 PHP의 질문을 데이터베이스의 답변과 동기화하기 위해 질문을 비교해야한다는 것입니다. PHP에서 하나의 질문이 변경 / 삭제 / 이동 된 경우 Questionnaire 데이터베이스의 답변과 일치하지 않을 것입니다. 더 나은 솔루션?
  3. 여러 요소에서 얻은 여러 답변을 하나의 답변으로 하나의 필드에 하나의 답변으로 유지할 수 있습니까? 고객이 양식을 볼 수 있도록이 필드를 검색하여 다시 표시하려면 어떻게해야합니까?
  4. 아래에서 어떤 옵션을 선택해야합니까?

옵션 1 : 기존 접근법 (1 테이블)

표 : 설문지

  • 아이디 (PK)
  • 고객 ID
  • 상태
  • A1
  • A2
  • A3
  • .
  • .
  • .
  • A100

옵션 2 : 새로운 접근법 (2 테이블)

표 : 질문

  • QID (PK)
  • 질문 (varchar)

표 : 답변

  • 원조 (PK)
  • 고객 ID
  • QID (int)
  • 답변 (varchar)

아니면 옵션 3?


응용 프로그램에 대한 자세한 정보를 추가 할 수 있습니까? -설문지가 동적으로 생성됩니까? IE :이 설문지에는 이러한 질문이 있어야하며 다른 설문지에는 다른 질문이 있어야합니다. -설문지에 대한 질문은 역동적입니까? IE : 고객은 나중에 새로운 질문을 추가 할 수 있습니다. 동적 시스템이든 정적 시스템이든 관계없이 1 : 1 Question-Answer 결과를 1 : M Question : Answers와 다르게 DB에 저장해야합니다.
Zambonilli

예와 아니오 각각 (동적 질문은 나중에 2 단계에 있지만 지금은 아닙니다.)
Modular

입력, 객관식 선택, 확인란, 라디오 버튼, 텍스트 영역 및 파일 업로드에 따라 100 가지 질문 을 마무리하기 위해 투표했습니다 .
Evan Carroll

답변:


17

설문지를 하드 코딩하지 마십시오. 관계형 데이터베이스 또는 xml 파일을 사용하십시오. 다음 표를 제안합니다

  • Questionnaire: 설문지에 대한 일반적인 설명. 제목, 설문 이름, 설문지 발표 날짜, 버전 등.

  • Section: 설문지 구성 섹션. 섹션 번호, 섹션 제목, 설명.

  • Question: 섹션에 속하는 질문. 질문 번호, 질문 텍스트, 설명, 질문 유형 (텍스트, 객관식 등)

  • Question_Choice: 단일 확인란, 라디오 버튼 등에 해당하는 질문에 대한 가능한 답변입니다. 선택 텍스트, 선택 번호, 주문.

  • Respondent: 질문에 대답하는 사람. 개인 데이터, 사용자 번호

  • Interview: 하나의 응답자와 하나의 설문에 속하는 인터뷰 또는 시험 또는 설문 조사 (질문의 특성에 따라). 응답자가 항상 하나의 설문지에만 응답 할 수 있거나 설문이 익명 인 경우이 테이블은 더 이상 사용되지 않으며 응답자 테이블과 병합 될 수 있습니다. 면접 날짜 (또는 시험 날짜 또는 설문 날짜), 면접관 (해당되는 경우).

  • Answer: 하나의 인터뷰 (또는 응답자, 위 참조) 및 하나의 질문에 속하는 답변. 답변 텍스트 (텍스트 유형 질문의 경우), 선택 (라디오 버튼의 경우).

  • Answer_Choice: 다중 선택을 확인할 수있는 경우 하나의 답변과 하나의 Question_Choice에 속하는 선택.

이것은 매우 표준화 된 접근법입니다. 그러나 선택 사항을 하나의 문자열로 연결하거나 비트 패턴으로 저장하거나 필요에 따라 다른 방식으로 단순화하기로 결정할 수 있습니다.


6

몇 개의 테이블이 필요합니다.

1-질문 (질문 ID, 입력 유형, 표시, 질문 유형, 질문 텍스트, 예상 답변 ...)

2-답변 (질문 ID, 사용자 ID, 활동 ID, 답변 ....)

3-사용자 (사용자 ID, 사용자 이름 ......)

4-질문 / 응답 활동을 보유하는 테이블 (활동 ID, 데이터 / 시간, 사용자 ID)

또한 사용자별로 그룹화되거나 질문 모음으로 각 활동에 적용해야하는 질문을 지정하는 표를 만들 수도 있습니다. 외래 / 기본 키는 여러 테이블에서 이름이 같은 열이며 인덱스되어야합니다.

이 구조를 사용하는 경우 스키마 또는 프리젠 테이션 코드를 변경하지 않고도 질문 또는 사용자를 추가하거나 답변을 변경할 수 있어야합니다. 프리젠 테이션 코드가 런타임에 동적으로 작성되는지 확인하십시오. 레코드 만 추가하면됩니다. 적절한 장소에.

이 방법은 하드 코딩 방식보다 초기에 개발하는 데 시간이 오래 걸릴 수 있지만 동작을 변경하려면 데이터를 변경하기 만하면되므로 유지 관리가 훨씬 간단합니다.

(팁, 프리젠 테이션 레이어를 만들려면 적절한 질문을 표시하는 쿼리가 필요합니다. 그런 다음이 결과 세트를 반복하고 화면에 질문에 렌더링하는 메소드를 호출하십시오. 해당 질문의 발표 [텍스트 상자, 라디오 그룹 등]


+1 표 # 4에 대해서는 잘 모르지만 전반적으로 좋은 대답입니다. 특히 나는 단수의 표 이름에서 복수의 질문, 즉 질문 >> 질문으로의 변경을 좋아합니다.
레이 리펠
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.