projekt bazy - ankiety - pytania - odpowiedzi

0

witam,
stoi przede mna stworzenie systemu ankiet, po wstepnej analizie wymyslilem rozwiazanie, chcialbym skonsultowac to w szerszym gronie

ankiety:
id|nazwa|ustawienia|.....

ankiety_strony: (podzial pytan na strony)
id|ankieta_id|numer

ankiety_pytania:
id|ankieta_id|pytanie|typ_pytania|strona_id(numer storny na ktorym jest)

ankiety_pytania_typ:
id|pytanie_id|nazwa

ankiety_pytania_odpowiedzi:
id|pytanie_id|odpowiedz|czy_kolumna(jezeli typ pytania to macierzowe, pole 'czy_kolumna' ustawia kolumny)

odpowiedz:
id|informacje o wypelniajacym

odpowiedz_pytanie:
id|odpowiedz_id|typ_pytania|wartosc

zakladam wystepowanie nastepujacych typow pytan:

  1. otwarte - czyli wartosc bedzie normlanie zpaisywana do rekordu
  2. zamkniete - wiele odpowiedzi - mozna wybrac 1 badz wiele - do pola wartosc zapisze tablice po zserializowaniu
  3. zamkniete - macierzowe - mozna wybrac wiele badz jedna dla danego wiersza i tutaj tez chcilabym zpaisac wielowymiarowa tablice po serializacji do pola wartosc

co o tym sadzicie? czy widzicie jakies problemy w tym rozwiazaniu?

0

Tak się zastanawiam po co ci ankieta_strony. Masz tam tak naprawdę powielone informacje ponieważ id i numer_strony niosą te same informacje logiczne, a nie mają "wartości dodanej".
Równie dobrze można zrobić:

ankiety_pytania:
id|ankieta_id|pytanie|typ_pytania|numer_strony

Przy dodawaniu pytania i tak musisz podać numer strony. Można ograniczyć ilość stron w ankiecie poprzez zdefiniowanie parametru ilość_stron. Uprości to, i to znacznie, wyszukiwanie (mniej joinów i jedną tabelę).

Tabela odpowiedź jak rozumiem ma jeszcze id_pytania i treść odpowiedzi/id_odpowiedzi dla pytań zamkniętych?

0

jak ogladalem systmey do tworzenia ankiet, to mozna bylo tworzyc puste strony ankiety, a to chyba glownie dlatego, ze tworzenie ankiety najlpeiej zrobic przeciagnij-upusc, tworzysz strone, a potem do niej przeciagasz upuszczasz pytania - chcialbym tak to rozwiazac, wybieranie numeru storny juz po utworzeniu pytania pogorszylo by uzytecznosc interfejsu - tak mi sie wydaje

tabela odpowiedz przehcowuje informacje o wypelniajacym odpowiedzi sa przehcowywane w tabeli: odpowiedz_pytanie - tam odp na kazdy typ pytania chcialbym skladowac w polu wartosc i tutaj widze najwiekszy znak zpaytania, czy to jest dobre rozwiązanie, dla pytan zamknietych(kilka odpowiedzi lub macierz) byla by zapisywana tablica, którą chciałbym serializować i wrzucac do bazy danych, co o tym sadzisz?

0

Chyba, że takie masz założenia.

W przypadku pytań zamkniętych wrzucasz jak rozumiem tablicę z zaznaczonymi odpowiedziami? W tedy git, ale musisz sobie przygotować jakieś parametryzowane widoki dla wyszukiwarki typu "ankietowani którzy udzielili zaznaczyli odpowiedzi X i Y na pytanie Z" i je dość dokładnie przetestować pod kątem wydajności.

Sama serializacja też powinna mieć pewne dobrze opisane cechy i to jej bym poświęcił trochę więcej czasu. Na przykład wstawiasz zaznaczone odpowiedzi w kolejności alfabetycznej np. jeżeli masz a,b,c,d,e to zawsze będziesz miał w wyniku serializacji a,c,d/c,d/b,e itp. Wtedy łatwiej szukać, bo można na przykład zamiast odpowiedzi w prost napisać sobie jeden bajt i mieć w nim wszystkie kombinacje odpowiedzi. W pewnym momencie proces serializacji będzie krótszy od procesu wyszukiwania pełnotekstowego i takie podejście na pewno się opłaci.

0

wymyslilem sobie, ze bede zapisywal cala tablice, w miejsca odpowiedzi 1 reszta 0, tak samo dla jedno i wielo wymiarowych tablic, wtedy sumowanie odpowiedzi powinno byc wzglednie proste :)

ale jak patrze to nie ma funkcji wbudowanych, ktore sumuja tablice wielowymiarowe

 <?php 


$tablica[0][0]= 1;
$tablica[0][1]= 0;
$tablica[1][0]= 1;
$tablica[1][1]= 1;
$tablica[2][0]= 1;
$tablica[2][1]= 1;


$tablica2[0][0]= 1;
$tablica2[0][1]= 0;
$tablica2[1][0]= 0;
$tablica2[1][1]= 1;
$tablica2[2][0]= 0;
$tablica2[2][1]= 1;



$m = sizeof($tablica);

for ($i = 0; $i < $m; $i++) {

$n = sizeof($tablica[$i]);
      for($j = 0; $j <= $n; $j++) {

$sum[$i][$j] = $tablica[$i][$j]+$tablica2[$i][$j];
}
}


print_r($sum);


?>

teraz czy taki kod by sie sprawdzil?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.