Aktualnie pracuję nad aplikacją do tworzenia/administrowania ankietami z PHP/MySQL. Przeszedłem kilka poprawek tabel bazy danych i ponownie stwierdziłem, że potrzebuję ponownie przemyśleć przechowywanie pewnego rodzaju odpowiedzi.Optymalny sposób przechowywania odpowiedzi ankiety wielokrotnego wyboru w bazie danych
Teraz mam tabeli, który wygląda tak:
survey_answers
id PK
eid
sesid
intvalue Nullable
charvalue Nullable
id = unikalną wartość przypisaną do każdego wiersza
eid = Survey wątpliwości, że ten odpowiedź jest odpowiedzią na
sesid = Badanie "sessio" n”(informacja o czasie i dacie odbierającym ankietowych) id
intValue = Wartość odpowiedź czy jest to wartość liczbowa
charvalue = wartość odpowiedź czy jest to reprezentacja tekstowa
Pozwoliło mi to na dalsze korzystanie z funkcji matematycznych MySQL w celu przyspieszenia przetwarzania.
Jednak znalazłem nowe wyzwanie: przechowywanie pytań z wieloma odpowiedziami. Przykład może wyglądać następująco:
Który z poniższych produktów sprawia przyjemność? (Wybierz wszystkie zastosowania)
- Girl Scout Cookies
- boczek
- Corn
- tłuszczu wieloryba
Teraz, gdy chcę zapisać wynik, nie jestem pewny najlepszego sposobu, by sobie z tym poradzić. Obecnie mam tabeli tylko dla wielu opcji wyboru, który wygląda tak:
survey_element_options
id PK
eid
value
id = wyjątkowa wartość związana z każdym rzędzie
eid = pytanie/elementu ta opcja jest powiązana z wartością
wartość = wartość tekstowa tej opcji
Za pomocą tej konfiguracji przechowuję zwrócone odpowiedzi wielokrotnego wyboru w "survey_answers" jako ciągi oddzielonych przecinkami identyfikatorów wierszy element_options wybranych w ankiecie.(np. "4,6,7,9") Zastanawiam się, czy to rzeczywiście najlepsze rozwiązanie, czy też byłoby bardziej praktyczne stworzenie nowej tabeli, która zawierałaby każdą wybraną odpowiedź, a następnie odniesienie do dany wiersz odpowiedzi, który z kolei odwołuje się do elementu i ostatecznie do ankiety.
EDIT
dla wszystkich zainteresowanych, tutaj jest podejście skończyło się na wyciągnięciu (w phpMyAdmin Relations View):
I prymitywny zapytania zebrać liczniki dla pytania wielokrotnego wyboru wyglądałoby następująco:
SELECT e.question AS question, eo.value AS value, COUNT(eo.value) AS count
FROM survey_elements e, survey_element_options eo, survey_answer_options ao
WHERE e.id = 19
AND eo.eid = e.id
AND ao.oid = eo.id
GROUP BY eo.value
Twoje # 2 jest naprawdę tym, co starałem się uzyskać z moim pytaniem, myślałem, że to może być najlepszy sposób przechowywania danych, ponieważ znacznie ułatwiłoby to analizę w celach analitycznych. Sądzę, że prawdopodobnie tak będzie w moim przypadku, ponieważ uważacie, że to dobre rozwiązanie. – SamHuckaby
@SamHuckaby zaktualizowano za pomocą przykładu (uwaga, nie rozwiązanie) – Matthew