Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [projektowanie] Poprawność BD dla strony testów
Forum PHP.pl > Forum > Bazy danych
maverickkk
Cześć.

Mam zrobić BD dla testera internetowego gdzie student wchodził by, logował by sie i byłby testowany z wiedzy o danej lekcji.

link od bazy: http://217.97.144.147/~i4659/up/upload/baza.jpg

sa dwie główne tabele:
1. zawiera informacje o osobie testowanej, o przedmiocie i lekcji z jakiej był testowany oraz o sumie zdobytych punktów
2. zawiera informacje o tym które odpowiedzi przypisac ktoremu pytania ( jest 1 pytanie i naprzyklad 4 odpowiedz) oraz o tym kotra odpowiedz jest poprawna (wartosc boolean przy odpowiedzi swiadczy ze odp. jest tą poprawną, jest 1 poprawna odpowiedz na pytanie)

Chciałbym abyście sprawdzili zy tak zaprojektowana baza danych jest tą najlepszą i czy nieda sie tego zrobić lepiej.

Pozdrawiam.
dr_bonzo
Raczej wiecej napisz co chciales osiagnac, jaka funkcjonalnosc uzyskac -- czy tylko zliczac ilosc punktow, czy pamietac tez zaznaczone odpowiedzi, itp. -- bo jak mamy ocenic czy wykonales to co chciales osiagnac.

Brakuje nazw tabel.

W tabeli od wynikow testu nie podawaj id_przedmiotu i id_lekcji -- wyciagniesz to po id_zestawu.

Nie rozumiem sensu tej tabeli pod Lekcjami (bez ID)

Zrobilbym to tak:

Kod
Uzytkownicy
---------
id
nazwa
...

Przedmioty
---------
id
nazwa

Lekcje (zakres materialu z przedmiotu, tak?)
---------
id
przedmiot_id
opis czy cos

Zestawy
---------
id
lekcja_id (przedmiot wyciagniesz JOINem na Przedmioty)


Pytania
---------
id
zestaw_id
tresc
waga

Odpowiedzi
---------
id
pytanie_id
tresc
czy_prawidlowa

Wyniki_testow
--------
uzytkownik_id
zestaw_id
punkty
PK(uzytkownik_id,zestaw_id)

(sa tu glownie pola wyznaczajace polaczenia miedzy tabelami, jak potrzebujesz dodatkowe to dodaj)

I uzywaj narzedzi do rysowania schematow (np. MySQL workbench) bo to jest z lekka nieczytelne smile.gif


Prawidlowa odpowiedz mozna by zapisywac w Pytaniu jako ID odpowiedzi, ale komplikuje sie gdy chcesz uzyc wiezy kluczy obcych. Bo rekordy z roznych tabel nawzajem sie do siebie odwoluja. Musialbys w pytaniu zezwolic na NULL dla prawidlowej odpowiedzi, tak zeby przy tworzeniu pytania nie podawac jeszcze praw. odpowiedzi, dopiero teraz utworzyc wszystkie odpowiedzi, i na koniec ustawic poprawna odpowiedz dla pytania smile.gif
maverickkk
Dzięki dr_bonzo bo już mi spooro pomogłeś.

Załączam nowy plik z uproszczoną bazą.

http://217.97.144.147/~i4659/up/upload/baza.jpg

dr_bonzo chciałeś abyn napisał co chciałem osiągnąć.

To ma być tester umiejętności studenta. Loguj sie na stronie, wybiera przedmiot i zaczyna test lekcji 1. Do puku nie zaliczyc w 50% lekcji pierwszej nie moze przejsc do kolejnych lekcji. Chodzi o zapamietanie kto i ile punktów zrobił z testu lekcji.

Główny problem to połączenie odpowiedzi do pytania, pytań do lekcji, lekcji z przedmiotem ale chyba mi sie to udało poprzez wstawienie kluczy obcych w tabeli 'odpowiedzi'

Co otym sądzisz ?

Pozdrawiam.
dr_bonzo
Zapomnialem o tym watku smile.gif

Znowu umiesciles w tabelach oba pola przedmiot_id i lekcja_id, skoro kazda lekcja nalezy tylko do jednego przedmiotu, to majac tylko wartosc lekcja_id (i przedmiot_id w tabeli) jestes w stanie pobrac przedmiot, ktorego ona dotyczy. Bo teraz mozesz lekcje nie nalezaca do przedmiotu do ktorego powinna nalezec.

Tym razem nie masz tabeli ZestawTestowy -- czyli na dana lekcje jest JEDEN zestaw pytan i user odpowiada na wszyskie?

Do poprawy:
* usun z tabeli Test FK do przedmiot_id
* usun z tabeli Odpowiedzi FK do przedmiot_id, lekcja_id
* w Pytania dodaj lekcja_id (bo pytanie nalezy do Lekcji)

Cytat
Główny problem to połączenie odpowiedzi do pytania, pytań do lekcji, lekcji z przedmiotem ale chyba mi sie to udało poprzez wstawienie kluczy obcych w tabeli 'odpowiedzi'


Jesli laczysz Lekcje i Przedmioty to czemu wstawiasz FK w tabeli Odpowiedzi. Klucz moze byc tylko w Lekcje (Lekcje naleza do Przedmiotu), Przedmioty (Przedmioty naleza do Lekcji; tutaj bez sensu) i ew. w LekcjePrzedmioty (dla relacji wiele-do-wielu, takiej akurat tu nie masz) -- pozostala ci tylko jedna mozwliowsc.

W skrocie -- zastosuj moj schemat, ktory podalem wyzej
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.