Lược đồ cơ sở dữ liệu khảo sát.
Đây là một cổ điển thực sự, được thực hiện bởi hàng ngàn. Chúng luôn có vẻ "khá đơn giản" để bắt đầu nhưng để tốt thì nó thực sự khá phức tạp. Để làm điều này trong Rails tôi sẽ sử dụng mô hình được hiển thị trong sơ đồ đính kèm. Tôi chắc chắn rằng nó có vẻ phức tạp đối với một số người, nhưng một khi bạn đã xây dựng một vài trong số đó, qua nhiều năm, bạn nhận ra rằng hầu hết các quyết định thiết kế là các mẫu rất cổ điển, được giải quyết tốt nhất bằng cấu trúc dữ liệu linh hoạt động tại ban đầu
Thêm chi tiết dưới đây:
Bảng chi tiết cho các bảng chính
câu trả lời
Bảng câu trả lời là rất quan trọng vì nó nắm bắt các phản hồi thực tế của người dùng. Bạn sẽ nhận thấy rằng các câu trả lời liên kết đến question_options chứ không phải câu hỏi . Đây là cố ý.
input_types
input_types là các loại câu hỏi. Mỗi câu hỏi chỉ có thể có 1 loại, ví dụ: tất cả các quay số radio, tất cả các trường văn bản, v.v. Sử dụng các câu hỏi bổ sung khi có (nói) 5 quay số radio và 1 hộp kiểm cho "bao gồm?" tùy chọn hoặc một số kết hợp như vậy. Dán nhãn cho hai câu hỏi trong chế độ xem của người dùng là một nhưng bên trong có hai câu hỏi, một cho quay số radio, một cho hộp kiểm. Hộp kiểm sẽ có một nhóm 1 trong trường hợp này.
nhóm tùy chọn
option_groups và option_choices cho phép bạn xây dựng các nhóm 'chung'. Một ví dụ, trong một ứng dụng bất động sản có thể có câu hỏi 'Tài sản này bao nhiêu tuổi?'. Các câu trả lời có thể được mong muốn trong các phạm vi: 1-5 6-10 10-25 25-100 100+
Sau đó, ví dụ, nếu có câu hỏi về tuổi thuộc tính liền kề, thì khảo sát sẽ muốn 'sử dụng lại' các phạm vi trên, để cùng tùy chọn và nhóm tùy chọn được sử dụng.
đơn vị đo lường
đơn vị_of_measure là như nó âm thanh. Cho dù đó là inch, cốc, pixel, gạch hay bất cứ thứ gì, bạn có thể xác định nó một lần ở đây.
FYI: Mặc dù về bản chất chung chung, người ta có thể tạo một ứng dụng trên đầu trang này và lược đồ này rất phù hợp với khung công tác Ruby On Rails với các quy ước như "id" cho khóa chính cho mỗi bảng. Ngoài ra, các mối quan hệ đều đơn giản là one_to_many không có nhiều thông số cần thiết hoặc has_many. Tôi có thể sẽ thêm has_many: thông qua và / hoặc: đại biểu mặc dù để có được những thứ như Survey_name từ một câu trả lời cá nhân một cách dễ dàng mà không có.multipl.chained.