2012-10-02 39 views
5

Vì vậy, tôi có biểu mẫu HTML nơi người dùng có thể trả lời các câu hỏi lựa chọn một bằng cách đánh dấu một trong ba câu trả lời đặt trước hoặc viết câu trả lời tùy chỉnh của riêng họ.Thiết kế cơ sở dữ liệu cho các câu hỏi cài đặt sẵn/tùy chỉnh

Trong khi điều này rõ ràng là mối quan hệ nhiều-nhiều, tôi vẫn không thể tìm được cách thích hợp để thiết kế các bảng cơ sở dữ liệu để xử lý cả hai loại (TEXT và BOOLEAN). Giải pháp nhanh chóng và bẩn hiện tại của tôi là mã cứng một choice_id cụ thể trong bảng giao diện cho các câu trả lời tùy chỉnh. Tôi đang tìm kiếm một mô hình tốt hơn cho việc này.

Trả lời

1

Có bảng sau đây:

Bảng 1: Question

QuestionID (ID) 
    QuestionText (Text) 

Bảng 2: Question Response

QuestionResponseId (ID) 
    QuestionResponseTypeId (References Question Response Type) 
    QuestionResponseDetailsId (References Question Response Details) - This should be used for text only values (Custom Answers) 
    QuestionResponse (Boolean) 

Bảng 3: Question Response Type

QuestionResponseTypeId (Id) 
    Description (Text) -- Dictates if the answer is a boolean or a text field 

Bảng 4: Question Response Details

QuestionResponseDetailsId (Id) 
    Description (Text) - Holds the text answer to the questions 

Khi các bảng sau đây được dân cư, bạn sẽ có một cấu trúc chứa các câu hỏi, câu trả lời của câu hỏi (văn bản hoặc boolean).

Sau đó bạn có thể lọc về vấn đề này để chỉ xem câu trả lời dựa trên văn bản, ví dụ:

SELECT * FROM QuestionResponse 
INNER JOIN QuestionResponseDetails ON QuestionResponse.QuestionResponseDetailsId = QuestionResponseDetails.QuestionResponseDetailsId 
WHERE QuestionResponse.QuestionResponseTypeId = 1 

đâu 1 là một căn cứ câu trả lời văn bản và 2 là một câu trả lời dựa Boolean (Từ Type Bảng Câu hỏi Response)

0

Nếu tôi là bạn, tôi sẽ làm một cái gì đó như thế này:

Table Answers: 
question_id INT(11) 
answer_id INT(11) 
preset_answer TINYINT(1) //1, 2, 3 for three answers 
custom_answer VARCHAR(255) 
Các vấn đề liên quan