Ankieta w MySQL - jak zorganizowac tabele?
Przemek - 11-03-2007 00:02
Ankieta w MySQL - jak zorganizowac tabele?
Witam
Ankieta ma wygladac nastepujaco:
Temat1: Pytanie 1 (Odp1, Odp2....) Pytanie 2 (Odp1, Odp2....) ......................................... Temat2: Pytanie 1 (Odp1, Odp2....) Pytanie 2 (Odp1, Odp2....) ......................................... TematN: Pytanie 1 (Odp1, Odp2....) Pytanie 2 (Odp1, Odp2....) .........................................
Cala ankieta wyswietla sie na jednej stronie WWW, ale jest podzielona na rozne dajmy na to Tematy(1-N). Tematy ankiet sie nie powtarzaja, lecz zawarte w nich pytania moga cie powtarzac w roznych Tematach, ale nie musza. Liczba Pytan w poszczegolnych Tematach, moze byc rozna. Liczba odpowiedzi na pozczegolne Pytania tez moze byc rozna i same odpowiedzi moga sie roznic od siebie (np od 2 do 6). Chcialbym, zeby to wszystko znajdowalo sie w bazie danych MySQL, tak aby mozna bylo usuwac cale Tematy, badz tylko Pytania (i odpowiedzi) lub je dodawac. Jak to zorganizowac, zeby bylo dobrze?
Myslalem o czyms takim:
Zrobic oddzielne (nie polaczone ze soba) tabele dla kazdego tematu (nazwa tabeli to Temat). Same nazwy tematow, mozna przechowywac w innej tabeli. W srodku np:
Temat1 Nazwa pytania | Odp1 | Odp2 | Odp3 | Odp4 ----------------------------------------------------------------- Pytanie1 Opcja1 Opcja2 Null - przypadek pytania, w ktorym sa tylko 2 odpowiedzi Pytanie2 Opcja1 Opcja2 Null Null Pytanie3 Opcja1 Opcja2 Opcja3 Opcja4
itd. dla kolejny Tematow
Natomiast tabela wynikow, wygladalaby nasepujaco:
TematWynik1 Nazwa pytania | Odp1 | Odp2 | Odp3 | Odp4 ----------------------------------------------------------------- Pytanie1 1 0 Null Null Pytanie2 1 0 Null Null Pytanie3 0 2 0 0 1- jedna osoba dala taka odp 2- dwie osoby tak odpwoeidzialy (cos w rodzaju licznika)
Nie chodzi mi o napisanie kodu, lecz zaproponowanie struktury tabel w MySQL. Moze ktos robil cos podobnego i mi podpowie, bede wdzeczny. Moj pomysl moze i zadziala, tylko jak np jedno pytanie bedzie mialo 16 odpowiedzi, to bede mial duzo pustych pol. Poza tym liczbe kolum podaje sie chyba z gory podczas projektowania bazy, dlatego z gory musialbym ograniczyc ilosc odpwoiedzi.
Pozdrawiam
Piotr 'piter' Hlawski - 11-03-2007 00:02
Taka prosta propozycja:
ankiety: id integer PK name varchar(100) NOT NULL
tematy: id PK ankieta_id integer FK references ankieta(id) description varchar(150) NOT NULL
pytania: id integer PK content text
odpowiedzi: id integer PK pytanie_id integer FK references pytania(id) content text
tematy_pytania temat_id integer PK FK references tematy(id) pytanie_id integer PK FK referenced pytania(id)
Pewnie dojdą do tego jakieś pola typu status (aktywna, nie aktywna), jakieś daty. Do tego by trzeba dodać tablice na zbieranie wyników itd. Ale kawy na ławę nie wyłożę, bo to nieedukacyjne :)
Myślę, że powinieneś trochę doczytać ogólnie o relacyjnych bazach danych, postaciach normalnych itd.
-- ..:: Piter // phlawski$gmail,com // gg: 4534287 ::. Jeśli powiesz "Chuck Norris" w Mongolii, ludzie zaczną cię kopać z półobrotu w twarz w jego imieniu. Zaraz po ich kopach, zostaniesz kopnięty w twarz z półobrotu przez samego Norrisa.
Przemek - 11-03-2007 00:02
Użytkownik "Piotr 'piter' Hlawski" <phlawski@cut_this_crap.gmail.com> napisał w wiadomości news:1226415.mrJnKqYOWd@zatoichi.homeunix.org... > Taka prosta propozycja: > > ankiety: > id integer PK > name varchar(100) NOT NULL > > tematy: > id PK > ankieta_id integer FK references ankieta(id) > description varchar(150) NOT NULL > > pytania: > id integer PK > content text > > odpowiedzi: > id integer PK > pytanie_id integer FK references pytania(id) > content text > > tematy_pytania > temat_id integer PK FK references tematy(id) > pytanie_id integer PK FK referenced pytania(id) > > Pewnie dojdą do tego jakieś pola typu status (aktywna, nie aktywna), > jakieś > daty. Do tego by trzeba dodać tablice na zbieranie wyników itd. Ale kawy > na > ławę nie wyłożę, bo to nieedukacyjne :) > > Myślę, że powinieneś trochę doczytać ogólnie o relacyjnych bazach danych, > postaciach normalnych itd. > > > -- > .:: Piter // phlawski$gmail,com // gg: 4534287 ::. > Jeśli powiesz "Chuck Norris" w Mongolii, ludzie zaczną cię kopać z > półobrotu > w twarz w jego imieniu. Zaraz po ich kopach, zostaniesz kopnięty w twarz z > półobrotu przez samego Norrisa. >
Dzieki;)
Napewno doczytam, a jak cos to jeszcze pomecze grupowiczow;> W wiekszosci ksiazek opisywany jest problem bazy danych np w jakims sklepie, albo cos podobnego. Jest sklep, baza w ktorej mozna identyfikowac klientow oraz produkty, ktore oni zamowili + data, cena. Sprawa sie komplikuje, gdy dany klient moze wybierac tylko w okreslonych produktach. Natomiast jeszcze inny klient moze wybierac w jeszcze innych produkach. Liczba produktow jest nieograniczona, no i trzeba je jakos podpisac pod danego klienta. Podobnie jest z tymi pytaniami w ankiecie.
Pozdrawiam
Piotr 'piter' Hlawski - 12-03-2007 00:01
Przemek wrote:
[...] > > Napewno doczytam, a jak cos to jeszcze pomecze grupowiczow;> > W wiekszosci ksiazek opisywany jest problem bazy danych np w jakims > sklepie, albo cos podobnego. > Jest sklep, baza w ktorej mozna identyfikowac klientow oraz produkty, > ktore oni zamowili + data, cena. > Sprawa sie komplikuje, gdy dany klient moze wybierac tylko w okreslonych > produktach. > Natomiast jeszcze inny klient moze wybierac w jeszcze innych produkach. > Liczba produktow jest nieograniczona, no i trzeba je jakos podpisac pod > danego klienta. > Podobnie jest z tymi pytaniami w ankiecie.
Widzisz, od tego są te relacyjne bazy danych (od tego one są;). Nie ma znaczenia na czym ci wytłumaczą, czy to będzie sklep czy magazyn czy co innego. Typy relacji pozostają te same, 3 postać normalna pozostaje na tej samej zasadzie - doczytaj.
-- ..:: Piter // phlawski$gmail,com // gg: 4534287 ::. Chuck Norris umarł dziesięć lat temu, ale Ponury Żniwiarz nie miał odwagi mu tego powiedzieć.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?=
[mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?=
[MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?=
[mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?=
[MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?=
[MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?=
Gdzie MySQL 4.1, a gdzie 5.0?
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=
[MS SQL] "set names" (mySQL) w MS SQL
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
zanotowane.pldoc.pisz.plpdf.pisz.pllisinski.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|