W tym ostatnim artykule z czteroczęściowej serii uzupełniam projekt bazy danych ankiet online, aby zapewnić elastyczność dla wielu ankiet, ponownego wykorzystania pytań, odpowiedzi wielokrotnego wyboru, kolejności pytań, warunkowych skoków w ankiecie na podstawie odpowiedzi oraz kontrola nad dostępem użytkowników do ankiet za pośrednictwem grup właścicieli ankiet.
Wprowadzenie
W podsumowaniu części 3 tej serii artykułów wspomniałem, że dodałbym do tego artykułu bardziej zaawansowane funkcje. Te zaawansowane funkcje to:
- administracja ankiet
- raporty i analityka
Dla przypomnienia, oto model po Części 3:
Administracja
Moim celem w administrowaniu ankietami jest umożliwienie grupie zarządzania ankietą i odpowiadającymi jej informacjami. Umożliwię więc użytkownikowi administracyjnemu zdefiniowanie grup użytkowników, którzy mogą wspólnie prowadzić ankietę internetową i jej pytania. Właściciel grupy może określić, jakie funkcje mogą wykonywać inni użytkownicy grupy; na przykład Jeff może zmieniać i usuwać ankiety i pytania, ale Joe może tylko wyświetlać ankiety i pytania, ale nie może ich zmieniać ani usuwać.
Jedną z rzeczy, które możesz zauważyć, jest to, że użytkownicy są oddzieleni od respondentów w ankiecie. Oczywiście użytkownik może również odpowiadać na ankietę, ale chciałbym zachować je oddzielnie, abym mógł wymagać mniej informacji od respondenta niż od użytkownika (na przykład usunąłem pole hasła z respondentem, aby łatwiej jest odpowiedzieć na ankietę bez tworzenia loginu/konta).
Zasadniczo na potrzeby tej administracji stworzę tabele dla grup i użytkowników oraz role i odpowiadające im uprawnienia lub akcje, które są dozwolone. Pozwala to na elastyczność, a nie na zakodowane połączenie między rolami a działaniami dozwolonymi przez każdą rolę. Oczywiście odpowiednia aplikacja musi zostać zbudowana, aby zrozumieć, jakie funkcje są dozwolone przez każde uprawnienie i musi zostać dostosowana po dodaniu nowej funkcjonalności, ale projekt bazy danych nie będzie musiał być zmieniany po dodaniu funkcjonalności – nowe wiersze będą dodawane do tabela łącząca role z uprawnieniami.
Możesz również zauważyć, że użyłem nieparzystej długości w email
kolumna na user
i respondent
tabele i nieparzysta wartość dla ip_address
kolumna dla respondent
; 254 to maksymalna długość, jaką może mieć adres e-mail zgodnie z definicjami RFC, podczas gdy 45 to maksymalna długość, jaką może mieć adres IPv6 (z tunelowaniem IPv4).
Dodatkowo dodam link z group
tabeli do survey
tabela, z której linki prowadzą do wszystkich powiązanych tabel (question_order
, survey_response
, conditional_order
, question_type
, response_choice
). W ten sposób, gdy grupa jest usuwana, mogę ostrzec jej właściciela, że wszystkie odpowiednie informacje zostaną usunięte.
Wolę to podejście polegające na łączeniu danych z tabeli z czymś innym niż konkretny użytkownik niż nie łączenie danych z niczym. Jeśli nie połączyliśmy danych z niczym (ani z grupą, ani z użytkownikiem), jak wydawało mi się to w poprzednich częściach tej serii artykułów, będziemy mieli wyzwanie, aby „oczyścić” nieaktualne dane, gdy użytkownik zostanie usunięty z ankiety online podanie. Powiązanie go z bardziej abstrakcyjnym pojęciem „grupa” umożliwia właścicielowi ponowne przypisanie własności grupy i wszystkich powiązanych danych (ankiet, pytań, odpowiedzi itp.) innemu członkowi grupy, jeśli to konieczne.
Projekt formalny
Następnie rozszerzamy ERD, który został stworzony w innych częściach tej serii artykułów.
Pokolorowałem tabele utworzone w części 1 na żółto, tabele dodane w części 2 na pomarańczowo, tabele dodane w części 3 na zielono, a nowo dodane tabele na jasnoniebieski, aby łatwiej było je zobacz dodatki. Kolor nie został dodany do kolumn i kluczy obcych, które zostały dodane w ostatnim artykule, więc aby zobaczyć różnice, musisz porównać bieżący model z poprzednim modelem z części 3.
Raporty i analizy
Mamy wystarczająco dużo informacji, które można wydobyć z tabel, aby stworzyć kilka raportów.
Na przykład, na które pytania udzielono odpowiedzi w konkretny sposób („w ankiecie 7, ile razy respondenci odpowiedzieli „Tak” na pytanie 10?”). Ten poziom informacji jest prawdopodobnie odpowiedni w przypadku podstawowych raportów dotyczących odpowiedzi na ankiety.
Możemy również wyodrębnić, ile czasu zajęło respondentom udzielenie odpowiedzi na konkretną ankietę („w ankiecie 5 średni czas spędzony na ankiecie wynosił 13 minut”); ponownie, może to być przydatna informacja, aby właściciele ankiety mogli dostosować pytania ankiety, aby nie wymagały więcej czasu niż typowy respondent lub to, co ankieter „obiecał” respondentom (np. „ta ankieta powinno zająć od 5 do 10 minut”). Wiem, że kiedy ktoś mówi mi, że powinienem skończyć w mniej niż 10 minut, a ja nadal przedzieram się przez pytania 15 minut później, wtedy się denerwuję i generalnie nie mam ochoty odpowiadać na kolejną ankietę z jego strony.
Na podstawie adresów IP respondentów możemy przeprowadzić wyszukiwanie wsteczne, aby uzyskać przybliżone wyobrażenie o tym, skąd pochodzą respondenci lub przynajmniej skąd wydaje się pochodzić ich adres IP, gdy odpowiadali. Należy pamiętać, że te informacje nie są w pełni wiarygodne, ponieważ ludzie mogą łączyć się przez VPN lub inne mechanizmy, które oddzielają ich adres IP od ich fizycznej lokalizacji.
Możemy nawet wyodrębnić, jak na pytania odpowiadali pierwsi respondenci, a jak odpowiedzieli ci ostatni respondenci. Może to przedstawić i interesujący punkt widzenia Twojej ankiety – na przykład, czy chętni ludzie, którzy najpierw odpowiedzieli na ankietę, zareagowali inaczej niż ludzie, którzy nie byli tak chętni i odpowiedzieli na ankietę później?
Na tym etapie myślę, że te raporty wystarczą i że bardziej zaawansowana analityka nie jest potrzebna, bo najważniejszą informacją jest oczywiście podstawowy raport o tym, jakie odpowiedzi udzielono na każde pytanie w ankiecie. Jeśli potrzebujesz bardziej zaawansowanych analiz, zastanów się, jakie są Twoje wymagania i jak istniejące dane lub nowe struktury mogą wspierać te analizy.
Wniosek
I masz to. Nie twierdzę, że jest to projekt idealnej bazy ankiet online, ale spełni to moje potrzeby w zakresie elastyczności:wielokrotne ankiety, ponowne wykorzystanie pytań, odpowiedzi wielokrotnego wyboru, kolejność pytań, warunkowe skoki w ankiecie na podstawie odpowiedzi i kontrolę nad dostępem użytkowników do ankiet za pośrednictwem grup właścicieli ankiet.
Jak robiłem w każdej poprzedniej części tej serii artykułów, zaznaczę, że możesz mieć inne wymagania. Określ swoje wymagania i zaimplementuj lub dostosuj to, czego potrzebujesz. Mocno wierzę w ponowne wykorzystanie, a nie wymyślanie koła na nowo.
Jeśli chcesz, abyśmy przeprojektowali lub rozszerzyli ten model zgodnie z potrzebami Twojej aplikacji, daj nam znać. Możemy Ci pomóc.
Model bazy danych dla ankiety internetowej – cała seria
Część 1 | Część 2 | Część 3 | Część 4 |