2011-02-11 5 views
2

this 질문에 관해서는, 제 경우를 제외하고는 거의 동일한 시나리오에 직면 해 있습니다. 질문은 아마도 정적 일 것입니다. (때때로 변경 될 수 있습니다. 여전히 각 질문에 대해 열을 추가하는 것은 좋지 않다고 생각합니다. , 심지어 대답을 지정/검색해야하는 방법을 추가하기로 결정 했음에도 불구하고 응답은 다른 유형으로되어 있습니다. 예를 들어 응답은 예/아니오, 목록 항목, 자유 텍스트, 목록 항목 또는 자유 텍스트 일 ​​수 있습니다 (기타, 구체적으로 설명하십시오), 여러 항목을 선택할 수있는 항목 등역동적 인 설문지를 효율적으로 저장하는 방법은 무엇입니까?

이것을 구현하는 효과적인 방법은 무엇입니까?

답변

3

Shimmy, 나는이 문제를 다루는 네 편의 기사를 작성했습니다. Creating a Dynamic, Data-Drive User Interface을 참조하십시오. 이 기사에서는 클라이언트에 대해 저장할 데이터를 사용자가 정의하도록하는 방법을 살펴본 결과 질문의 정확한 검사는 아니지만 꽤 가깝습니다. 즉, 제 기사에서는 최종 사용자가 저장하려는 데이터의 유형을 정의하는 방법을 보여줍니다. 원하는 유형의 선을 따라 있습니다.

다음

Data model

, DynamicAttributesForClients 어떤 사용자가 만든 것은 사용자가 자신의 클라이언트를 추적하고자하는 속성을 나타내는 표입니다 :

다음 ER 다이어그램

데이터 모델의 요점을 제공합니다. 간단히 말해 각 속성의 값은 DataTypeId이며 부울 속성, 텍스트 속성, 숫자 속성 등을 나타냅니다. 귀하의 경우이 표는 설문 조사의 질문을 저장합니다.

DynamicValuesForClients 테이블은 특정 속성에 대해 특정 클라이언트에 대해 저장된 값을 보유합니다. 귀하의 경우이 표에는 설문 조사의 질문에 대한 답변이 저장됩니다. 실제 값은 유형이 sql_variantDynamicValue 열에 저장되어 숫자, 비트, 문자열 등 모든 유형의 데이터를 저장할 수 있습니다.

내 기사에서는 객관식 질문을 처리하는 방법에 대해 설명하지 않습니다. 사용자가 미리 설정된 옵션 목록에서 하나의 옵션을 선택할 수 있지만이를 허용하도록 데이터 모델을 향상시키는 것은 매우 간단합니다. - 기본 키

  • DynamicAttributeId -이 질문은
  • OptionText과 관련된 속성을 지정 - 옵션 텍스트
    • DynamicListOptionId 다음과 같은 열이 DynamicListOptions라는 새 테이블을 만들 것

      객관식 옵션 인 특성이있는 경우 사용자 인터페이스의 드롭 다운 목록에 쿼리에서 반환 된 옵션을 채 웁니다.

      SELECT OptionText 
      FROM DynamicListOptions 
      WHERE DynamicAttributeId = ... 
      

      마지막으로, 당신은 (그들이 항목을 선택하지 않은 경우 또는 NULL 사용)가 선택 목록 옵션을 기록 할 DynamicValuesForClients.DynamicValue 열에서 선택한 DynamicListOptionId 값을 저장한다.

      기사를 처음부터 끝까지 읽으십시오. 전체 데이터베이스와 모델을 포함하여 다운로드 할 수있는 완전하고 실용적인 데모가 있습니다. 또한이 시리즈를 구성하는 네 가지 기사에서는 데이터 모델을 깊이 탐구하고 사용자가 동적 특성을 정의 할 수 있도록 웹 기반 (ASP.NET) 사용자 인터페이스를 작성하는 방법, 데이터 특성을 표시하는 방법 등을 보여줍니다. .

      해피 프로그래밍!

    +0

    그리고 목록 항목을 포함시킬 것입니까? 예 : 대답은 사전 설정 목록 + "기타"에서 오는 응답입니다. 내 질문을 읽어보십시오. – Shimmy

    +0

    @Shimmy : 객관식 질문에 대한 토론을 포함하도록 답변을 업데이트했습니다. . 감사합니다 –

    2

    Survey ERD

    이 정확히 맞게, 그러나 여기 난 내 아르바이트에있어 무엇을하지 않을 수 있습니다.

    질문 표, 답변 표 및 설문 조사표가 있습니다. 새로운 설문 조사마다 설문 조사를 작성합니다 (각 설문 조사는 고유하지만 질의 응답은 많이 반복되기 때문에). 그런 다음 응답자에 대한 정보가 포함 된 응답자 테이블을 가지고 있습니다 (또한 설문 테이블로 다시 연결되며 다이어그램에서이를 잊어 버렸습니다). 응답자와 설문 조사를 연결하는 응답 테이블도 있습니다. 이것은 아마도 최선의 방법은 아니지만 그것은 나를 위해 작동하는 방법이며, 그것은 매우 빠르게 작동합니다 (우리는 반응 테이블에서 약 1mill +에 있으며 꿈처럼 처리합니다).

    이 모델에서는 재사용 가능한 질문, 재사용 가능한 답변 (많은 질문에서 "예"및 "아니오"사용) 및 비교적 슬림 한 응답 표가 제공됩니다.

    +0

    고마워요. 당신의 대답은 제가 비슷한 것을 고안 할 때 저의 머리를 얻을 수 있도록 도와주었습니다. 건배! – Jeremy

    관련 문제