Schemat bazy danych ankiety.
To prawdziwy klasyk, robiony przez tysiące. Na początku zawsze wydają się „dość proste”, ale aby być dobrym, w rzeczywistości są dość złożone. Aby to zrobić w Railsach, użyłbym modelu pokazanego na załączonym schemacie. Jestem pewien, że dla niektórych wydaje się to zbyt skomplikowane, ale po zbudowaniu kilku z nich z biegiem lat zdajesz sobie sprawę, że większość decyzji projektowych to bardzo klasyczne wzorce, najlepiej rozwiązane za pomocą dynamicznej elastycznej struktury danych w początek.
Więcej szczegółów poniżej:
Szczegóły tabeli dla tabel kluczy
odpowiedzi
Odpowiedzi tabela jest krytyczna, gdyż oddaje rzeczywiste reakcje przez użytkowników. Zauważysz, że odpowiada na linki do pytań_opcji , a nie pytań . To celowe.
typy_wejściowe
typy_wejściowe to typy pytań. Każde pytanie może być tylko jednego typu, np. Wszystkie numery wybierania radiowego, wszystkie pola tekstowe itp. Użyj dodatkowych pytań, gdy jest (powiedzmy) 5 numerów wybierania radiowego i 1 pole wyboru dla „dołącz?” opcja lub jakaś taka kombinacja. Oznacz dwa pytania w widoku użytkowników jako jedno, ale wewnętrznie masz dwa pytania, jedno dla wybierania radiowego, jedno dla pola wyboru. W tym przypadku pole wyboru będzie miało grupę 1.
grupy_opcji
Option_groups i Option_choices pozwalają budować „wspólne” grupy. Jednym z przykładów może być pytanie dotyczące aplikacji nieruchomości „Ile lat ma nieruchomość?”. Odpowiedzi mogą być pożądane w zakresach: 1-5 6-10 10-25 25-100 100+
Następnie, na przykład, jeśli pojawi się pytanie o przylegający wiek nieruchomości, wówczas ankieta będzie chciała „ponownie wykorzystać” powyższe zakresy, aby wykorzystać tę samą grupę opcji i opcje.
jednostki miary
Jednostki pomiaru są takie, jak się wydaje. Niezależnie od tego, czy są to cale, kubki, piksele, cegły czy cokolwiek innego, możesz zdefiniować to tutaj.
FYI: Mimo że jest to rodzaj ogólny, można na nim utworzyć aplikację, a ten schemat jest dobrze dostosowany do frameworka Ruby On Rails z konwencjami takimi jak „id” dla klucza podstawowego dla każdej tabeli. Również wszystkie relacje są proste one_to_many, bez potrzeby wielu_to_many lub koniecznych przejść przez wiele. Prawdopodobnie dodałbym has_many: throughs i / lub: delegatów, aby łatwo uzyskać takie rzeczy jak nazwa_badania z indywidualnej odpowiedzi bez.multiple.chaining.