복붙노트

[SQL] 설문 조사에 대한 데이터베이스 설계 [폐쇄]

SQL

설문 조사에 대한 데이터베이스 설계 [폐쇄]

나는 대답이 데이터베이스에 저장됩니다 설문 조사를 작성해야합니다. 난 그냥 특히 테이블이 필요한 데이터베이스에서이를 구현하는 가장 좋은 방법 일 것입니다 무슨 궁금하네요. 설문 조사는 질문의 다른 유형을 포함하고 있습니다. 예를 들어 : 덧글에 대한 텍스트 필드, 객관식 문제, 그리고 아마도 질문 (즉 해당 사항을 모두 확인) 하나 이상의 답을 포함 할 수 있었다.

나는 두 가지 해결책을 마련했습니다 :

나는 어떤 아이디어와 제안을 감사하겠습니다.

해결법

  1. ==============================

    1.그러나 나는 당신이 더 복잡한 모델에 좀 걸릴 수 있습니다, 모델 # 2가 잘이라고 생각하는 저장 질문과 미리 만들어진 답변 (제공 응답)하고 재 사용하는 다른 설문 조사에있을 수 있습니다. - 한 설문 조사는 많은 질문을 할 수 있습니다; 하나 개의 질문은 많은 설문 조사에 사용 된 (재) 일 수있다. - 한 (사전 제작) 대답은 많은 질문을 위해 제공 할 수 있습니다. 질문 하나가 제공 많은 답변을 할 수 있습니다. 질문은 다른 설문 조사에서 제공되는 다른 대답을 할 수 있습니다. 대답은 다른 설문 조사에서 다른 질문에 제공 할 수 있습니다. 기본 "기타"대답은 사람이 다른 선택하는 경우, 그녀의 대답은 Answer.OtherText에 기록되어있다. - 한 사람 한 사람이 한 번만 설문 조사에서 특정 질문에 대답 할 수 많은 설문 조사에 참여할 수 있습니다.

    그러나 나는 당신이 더 복잡한 모델에 좀 걸릴 수 있습니다, 모델 # 2가 잘이라고 생각하는 저장 질문과 미리 만들어진 답변 (제공 응답)하고 재 사용하는 다른 설문 조사에있을 수 있습니다. - 한 설문 조사는 많은 질문을 할 수 있습니다; 하나 개의 질문은 많은 설문 조사에 사용 된 (재) 일 수있다. - 한 (사전 제작) 대답은 많은 질문을 위해 제공 할 수 있습니다. 질문 하나가 제공 많은 답변을 할 수 있습니다. 질문은 다른 설문 조사에서 제공되는 다른 대답을 할 수 있습니다. 대답은 다른 설문 조사에서 다른 질문에 제공 할 수 있습니다. 기본 "기타"대답은 사람이 다른 선택하는 경우, 그녀의 대답은 Answer.OtherText에 기록되어있다. - 한 사람 한 사람이 한 번만 설문 조사에서 특정 질문에 대답 할 수 많은 설문 조사에 참여할 수 있습니다.

  2. ==============================

    2.내 설계는 다음과 같습니다.

    내 설계는 다음과 같습니다.

    최근 생성 스크립트는 https://gist.github.com/durrantm/1e618164fd4acf91e372에있다

    스크립트와 MySQL의 workbench.mwb 파일은에서 구할 수 있습니다 https://github.com/durrantm/survey

  3. ==============================

    3.확실히 옵션 # 2, 또한 당신이, 당신은 다른 테이블을 할 수 있습니다 현재 스키마의 감독이있을 수 있습니다 생각 :

    확실히 옵션 # 2, 또한 당신이, 당신은 다른 테이블을 할 수 있습니다 현재 스키마의 감독이있을 수 있습니다 생각 :

    +-----------+
    | tblSurvey |
    |-----------|
    | SurveyId  |
    +-----------+
    
    +--------------+
    | tblQuestion  |
    |--------------|
    | QuestionID   |
    | SurveyID     |
    | QuestionType |
    | Question     |
    +--------------+
    
    +--------------+
    | tblAnswer    |
    |--------------|
    | AnswerID     |
    | QuestionID   |
    | Answer       |
    +--------------+
    
    +------------------+
    | tblUsersAnswer   |
    |------------------|
    | UserAnswerID     |
    | AnswerID         |
    | UserID           |
    | Response         |
    +------------------+
    
    +-----------+
    | tblUser   |
    |-----------|
    | UserID    |
    | UserName  |
    +-----------+
    

    각 질문은 아마 사용자가 다음 실제 응답이 다른 테이블에 추적 할 예정 선택할 수 있습니다 답변 세트 번호를해야 할 것입니다.

    데이터베이스는 많은 양의 데이터를 저장하도록 설계하고, 가장 잘 확장된다. 덜 일반적인 형태는 단순히 더 이상 공간에 저장하는 사용자에게 실제 필요가 전혀 없습니다.

  4. ==============================

    4.일반적으로, 사용자 (예 : 설문 조사 질문을 추가하는 등)을 변경할 수 있다는 것을 기반으로 수정 스키마는 상당히 냄새 나는 고려되어야한다. 그것은 특히 많은 양의 데이터를 처리 할 때, 적절한,하지만 당신이 다이빙 전에 들어갈하는지 알 수있는 경우가있다. 질문을 추가하거나 제거하는 것은 잠재적으로 매우 비용이 많이 드는 것으로 각각 조사 수단에 불과 "응답"테이블을 갖는 하고 질문 불가지론 방법으로 분석을하는 것은 매우 어렵습니다.

    일반적으로, 사용자 (예 : 설문 조사 질문을 추가하는 등)을 변경할 수 있다는 것을 기반으로 수정 스키마는 상당히 냄새 나는 고려되어야한다. 그것은 특히 많은 양의 데이터를 처리 할 때, 적절한,하지만 당신이 다이빙 전에 들어갈하는지 알 수있는 경우가있다. 질문을 추가하거나 제거하는 것은 잠재적으로 매우 비용이 많이 드는 것으로 각각 조사 수단에 불과 "응답"테이블을 갖는 하고 질문 불가지론 방법으로 분석을하는 것은 매우 어렵습니다.

    나는 두 번째 접근 방식이 최고라고 생각하지만, 하이브리드 접근 방식은, 나를 위해 과거에 근무하고있다 한 가지 규모의 우려를 많이 할 겁니다 확실한 경우 :

    난 정말이 조언을하지 않을이 절대적으로 구현하는 많은 더 일이다, 그래서 당신은이 테이블이 대규모 문제로 실행하려고 것이 확실한 경우를 제외.

  5. ==============================

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

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

    당신이 더를 정상화하려는 경우 당신은 문제 유형에 대한 테이블을 만들 수 있습니다

    할 수있는 간단한 일이 있습니다 :

    우리는 수백만 행의 10 개의와 SQL 서버 표 로그 테이블이 있었다.

  6. ==============================

    6.어떤이 개의 외모를 잘하지 않습니다.

    어떤이 개의 외모를 잘하지 않습니다.

    단지 4 열이있는 테이블의 경우 심지어 좋은 몇 백만 행이, 문제가되지 않습니다. 물론 이것은 당신이 사용중인 데이터베이스에 따라 달라질 수 있습니다. SQL Server와 같은 그 뭔가 그것은 아무 문제가 없을 것입니다 경우.

    당신은 아마 tblAnswer 테이블에서 QuestionID 필드에 인덱스를 생성 할 것입니다.

    물론, 당신은 당신이 아니라 추정 된 볼륨으로 사용하고있는 데이터베이스 지정해야합니다.

  7. ==============================

    7.외모는 예쁜 smiple 설문 조사에 대한 완료합니다. 고객이 텍스트 상자를 통해 자신의 의견을 제공 할 수있는 '열린 가치'에 대한 테이블을 추가하는 것을 잊지 마십시오. 성능에 대한 모든 관계형 컬럼에 대한 답변과 장소 인덱스에 외래 키와 해당 테이블을 연결합니다.

    외모는 예쁜 smiple 설문 조사에 대한 완료합니다. 고객이 텍스트 상자를 통해 자신의 의견을 제공 할 수있는 '열린 가치'에 대한 테이블을 추가하는 것을 잊지 마십시오. 성능에 대한 모든 관계형 컬럼에 대한 답변과 장소 인덱스에 외래 키와 해당 테이블을 연결합니다.

  8. ==============================

    8.수 2 올바른 것입니다. 때까지 올바른 설계를 사용하면 않는 한 성능 문제를 감지합니다. 대부분의 RDBMS는 좁은하지만 매우 긴 테이블에 문제가되지 않습니다.

    수 2 올바른 것입니다. 때까지 올바른 설계를 사용하면 않는 한 성능 문제를 감지합니다. 대부분의 RDBMS는 좁은하지만 매우 긴 테이블에 문제가되지 않습니다.

  9. ==============================

    9.그 자체의 큰 응답 테이블을 갖는, 문제가되지 않습니다. 한 인덱스 및 제약 조건이 잘 정의 된대로 잘해야합니다. 두 번째 스키마는 나에게 좋아 보인다.

    그 자체의 큰 응답 테이블을 갖는, 문제가되지 않습니다. 한 인덱스 및 제약 조건이 잘 정의 된대로 잘해야합니다. 두 번째 스키마는 나에게 좋아 보인다.

  10. ==============================

    10.전통적인 관계형 데이터베이스 시스템에 대한 적절한 번째 솔루션이 표준화되어 인덱스 좋은 감안할.

    전통적인 관계형 데이터베이스 시스템에 대한 적절한 번째 솔루션이 표준화되어 인덱스 좋은 감안할.

    나는 거대한 얼마나 큰 모르지만 그것은 부부에게 문제없이 만 개 답변을 개최한다.

  11. ==============================

    11.당신은 JSON 문자열로 전체 양식을 저장하도록 선택할 수 있습니다.

    당신은 JSON 문자열로 전체 양식을 저장하도록 선택할 수 있습니다.

    귀하의 요구 사항에 대해 확실하지만,이 방법은 어떤 환경에서 작동 할 수 없습니다.

  12. from https://stackoverflow.com/questions/1764435/database-design-for-a-survey by cc-by-sa and MIT license