Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Mô hình Cơ sở dữ liệu cho Khảo sát Trực tuyến. Phần 3

Trong phần kết luận của Phần 2 trong loạt bài viết này, tôi đã đề cập rằng tôi sẽ thêm các tính năng nâng cao hơn, chẳng hạn như:

  • Thứ tự câu hỏi có điều kiện trong một cuộc khảo sát hay nói cách khác là khả năng cho một con đường có điều kiện thông qua cuộc khảo sát
  • Quản trị của cuộc khảo sát
  • Báo cáo phân tích

Trong bài viết thứ ba này liên quan đến một cuộc khảo sát trực tuyến , Tôi sẽ mở rộng chức năng để hỗ trợ sắp xếp các câu hỏi có điều kiện.

Trong tương lai, chúng tôi có thể thêm các câu hỏi yêu cầu câu trả lời được xếp hạng. Ví dụ:“Bạn thích thiết kế cơ sở dữ liệu đến mức nào, hãy xếp hạng từ 1 đến 100 (với 1 cho biết bạn thích nó rất ít và 100 cho biết bạn vô cùng thích nó)?”

Đường dẫn có điều kiện

Chúng tôi muốn đặt các điều kiện nhất định đối với các câu hỏi được trình bày cho người dùng dựa trên phản hồi của người dùng. Ví dụ, nếu câu trả lời cho câu hỏi 4 là “có”, thì chúng tôi hỏi câu hỏi 5 và bỏ qua câu hỏi 6; trong khi nếu câu trả lời cho câu hỏi 4 là “không” thì chúng ta bỏ qua câu hỏi 5 và hỏi câu hỏi 6).

Vì vậy, chúng ta cần xác định câu hỏi nào là câu hỏi điều kiện và cách "bỏ qua" câu hỏi dựa trên câu trả lời cho một câu hỏi.

Ban đầu, để giữ cho đường dẫn có điều kiện đơn giản, chúng tôi sẽ không cho phép các điều kiện dựa trên các câu hỏi trắc nghiệm, mà chỉ cho các câu hỏi cực (có hoặc không). Thiết kế có thể được mở rộng để hỗ trợ các đường dẫn có điều kiện dựa trên các câu hỏi trắc nghiệm, nhưng điều đó phức tạp hơn và tôi muốn bắt đầu đơn giản.

Điều quan trọng là ứng dụng kiểm tra luồng này cho mỗi câu hỏi, vì câu trả lời cho câu hỏi trước có thể quyết định luồng cho câu hỏi hiện tại (để bỏ qua một câu hỏi dựa trên câu trả lời trước đó).

Quản trị &Báo cáo

Hiện tại, chúng tôi sẽ không thêm quản trị viên của các cuộc khảo sát trực tuyến, nhưng giữ nguyên điều đó cho phần mở rộng tiếp theo.

Sẽ cần phải có một số báo cáo và phân tích; tuy nhiên, tôi sẽ giữ điều này cho phiên bản tiếp theo vì tôi muốn lưu trữ một số thông tin trước để thực hiện phân tích sau này.

Thực thể và Mối quan hệ

Đối với đường dẫn có điều kiện thông qua khảo sát, tôi sẽ mở rộng question_order được xác định cho mỗi cuộc khảo sát và liên kết cuộc khảo sát với các câu hỏi. Như đã đề cập, hiện tại, bước nhảy có điều kiện sẽ chỉ dựa trên các câu hỏi phân cực, vì vậy tôi có thể xác định câu hỏi tiếp theo để hiển thị trong trường hợp phản hồi tích cực và câu hỏi tiếp theo sẽ hiển thị trong trường hợp phản hồi tiêu cực.

Thiết kế trang trọng

Hãy mở rộng ERD đã được tạo trong Phần 1 của loạt bài viết này.

Tôi sẽ thêm conditional_order được liên kết với question_order; như tôi đã đề cập trước đó, tôi sẽ chỉ hỗ trợ thứ tự có điều kiện thông qua khảo sát dựa trên các câu hỏi cực. Bây giờ, có một số cách có thể được thực hiện. Nhu cầu của tôi là thẳng thắn, vì vậy tôi sẽ chọn cách triển khai thẳng thắn. Nếu nhu cầu của bạn phức tạp hơn, bạn sẽ cần một giải pháp phức tạp hơn.

Sẽ rất tuyệt nếu chỉ xác định câu hỏi “tiếp theo” sẽ được hỏi dựa trên câu trả lời của câu hỏi hiện tại, nhưng điều đó sẽ không cho phép chúng tôi bỏ qua một câu hỏi sau đó trong cuộc khảo sát, vì vậy chúng tôi cần linh hoạt hơn.

Một cách là xác định có bao nhiêu câu hỏi cần chuyển tiếp trong trường hợp phản hồi tích cực và bao nhiêu câu hỏi chuyển tiếp đối với phản hồi tiêu cực; tuy nhiên, tôi phải chỉ định câu hỏi nào áp dụng bước nhảy và câu trả lời cho câu hỏi nào sẽ được sử dụng. Vì vậy, để hỗ trợ ví dụ của tôi:nếu câu trả lời cho câu hỏi 4 là "có", thì chúng tôi hỏi câu hỏi 5 và bỏ qua câu hỏi 6, trong khi nếu câu trả lời cho câu hỏi 4 là "không", thì chúng tôi bỏ qua câu hỏi 5 và hỏi câu hỏi 6 - điều này yêu cầu hai mục nhập, cả hai đều kiểm tra câu trả lời cho câu hỏi 4, một mục chuyển tiếp một câu hỏi (như thường lệ) và một mục chuyển tiếp hai câu hỏi (để bỏ qua một câu hỏi) và điều kiện còn lại được kiểm tra sau khi trả lời câu hỏi 5 mà bỏ qua câu hỏi 6.

  +-------------------+----------------------+------------------------+------------------------+ 
  | question_order_id | response_to_question | positive_response_jump | negative_response_jump |
  +-------------------+----------------------+------------------------+------------------------+
  | 4                 | 4                    | 1                      | 2                      |
  +-------------------+----------------------+------------------------+------------------------+
  | 5                 | 4                    | 1                      | null                   |
  +-------------------+----------------------+------------------------+------------------------+

Một giải pháp thay thế là chỉ định id của câu hỏi tiếp theo mà khảo sát sẽ chuyển đến trong trường hợp có một câu trả lời cụ thể:câu hỏi tiếp theo trong trường hợp phản hồi tích cực và câu hỏi tiếp theo trong trường hợp tiêu cực phản ứng. Cách tiếp cận này có ưu và nhược điểm. Nó sẽ cho phép các vòng lặp xảy ra mà quản trị viên có thể không nhận thấy. Tuy nhiên, các vòng lặp có thể là một hiệu quả mong muốn để bạn có thể đặt câu hỏi cuối cùng hỏi người trả lời nếu họ đã hoàn thành cuộc khảo sát và nếu họ trả lời “không”, thì hãy quay lại câu hỏi đầu tiên. Ngoài ra, các câu hỏi để chuyển đến trong trường hợp phản hồi tích cực hoặc tiêu cực có thể được thiết lập làm khóa ngoại cho thứ tự câu hỏi được chỉ định cho khảo sát để chúng tôi biết chắc chắn rằng câu hỏi cụ thể đã được xác định trong khảo sát. Đây là một kiểm tra logic tốt được thực hiện thông qua tính toàn vẹn tham chiếu. Tôi nghĩ rằng đây có lẽ là giải pháp tốt hơn, vì vậy đó là những gì bạn sẽ tìm thấy trong ERD.

Vì vậy, để hỗ trợ cho ví dụ của tôi:nếu câu trả lời cho câu hỏi 4 là “có”, thì chúng tôi hỏi câu 5 và bỏ qua câu hỏi 6, trong khi nếu câu trả lời cho câu hỏi 4 là “không” thì chúng tôi bỏ qua câu hỏi 5 và hỏi câu hỏi 6.

Như đã đề cập, chúng ta có hai hàng:

Survey #1, question #4, response to question #4, positive response: next question order id = 5, negative response: next question order id = 6.

Survey #1, question #5, response to question #4, positive response: next question order id = 7. We will never get to question #5 if the response to question #4 was negative, so we always skip question #6 after asking question #5.

  +--------+----------+----------------------+-------------------------------+-------------------------------+
  | survey | question | response_to_question | positive_response_question_id | negative_response_question_id |
  +--------+----------+----------------------+-------------------------------+-------------------------------+
  | 1      | 4        | 4                    | 5                             | 6                             |
  +--------+----------+----------------------+-------------------------------+-------------------------------+
  |        | 5        | 4                    | 7                             | null                          |
  +--------+----------+----------------------+-------------------------------+-------------------------------+

Khi thiết lập điều kiện, chúng tôi sẽ sử dụng khóa ngoại (không bắt buộc) để đảm bảo rằng câu hỏi tiếp theo tồn tại. Giá trị null được sử dụng cho một đường dẫn không thể thực hiện được hoặc nếu không có câu hỏi tiếp theo nào được chỉ định, để kết thúc khảo sát có điều kiện.




Tôi đã tô màu các bảng được tạo trong Phần 1 của loạt bài viết có màu vàng, các bảng được thêm vào Phần 2 có màu cam và bảng mới được thêm vào có màu xanh lục để dễ xem các bổ sung hơn.

Kết luận

Không phải giải pháp nào được mô tả để quản lý các bước có điều kiện thông qua khảo sát là hệ thống dựa trên quy tắc cuối cùng, nhưng một trong những mục tiêu của tôi là giữ cho mọi thứ đơn giản và dễ hiểu. Cho phép sự linh hoạt mà không áp đảo những thứ phức tạp. Và, tôi sẽ tự nhắc lại, bạn có thể có các yêu cầu khác. Xác định các yêu cầu của bạn; thực hiện hoặc điều chỉnh những gì bạn cần. Tôi rất tin tưởng vào việc tái sử dụng và không phát minh lại bánh xe.

Bây giờ chúng tôi đã bắt đầu triển khai các cải tiến đã được thảo luận trong phần 1 và 2 của loạt bài viết này.

Trong các bài viết tiếp theo, tôi sẽ bổ sung hỗ trợ cho các tính năng này:

  • Quản lý các cuộc khảo sát
  • Báo cáo và phân tích

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng thuật sĩ tổ chức lại ngoại tuyến

  2. Tự tạo danh sách tuyệt vời hoặc GitHub dưới dạng Notebook

  3. Trận đấu gần nhất, Phần 1

  4. IGNORE_DUP_KEY chậm hơn trên các chỉ mục được nhóm

  5. Phân tích hoạt động theo thời gian thực và chỉ mục cửa hàng theo cột không được phân cụm