Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Normalizacja
Forum PHP.pl > Forum > Bazy danych > MySQL
Corsarz
Hej, potrzebuje znormalizować bazę docelową - dziennik zajęć. Wymagane pola - w załączniku, mam problem w ustaleniem klucza podstawowego...jakby ta sama ocena nie mogla sie pojawiać na jednych zajęciach to kluczem byłby {NR_prowadz,nr_cz,NR_kurs,dzień,ocena}...no ale w tym przypadku...no właśnie, gdzie jak wyodrębnić klucz podstawowy?link jak wygląda tabela http://www.fotosik.pl/pokaz_obrazek/pelny/...a797499a87.html
Odpowiem sam sobie...Musi być dodatkowe pole, ponieważ żadna kombinacja atrybutów, która jest teraz nie zapewni unikalności...dodatkowy atrybut...ale jaki? (unikalność nie będzie zachowana ponieważ ta sama ocena może sie pojawić tego samego dnia , na tym samym przedmiocie)
kwiateusz
moze zwyczajnie id? bedzie o 1 wieksze dla kazdego rekordu 1,2,3...10
Corsarz
Pomnysł z stawieniem autoID nie podoba mi się, z tego powodu, ze to ID bedzie rownoczesnie kluczem podstawowym, i po 3 postaci normalenj baza bedzie wygladala tak:
{Nr_ucznia PK, Imie_ucznia,Nazwisko_ucznia,Semestr}
{Nr_prowadzacego PK, imie_prowadz, nazwisk_proawdzac}
{Nr_przedmiotu PK, nazwa_pzredmiotu}
i nieszczessna
{ID_rekordu PK, nr_ucznia FK, nr_prowadzacego FK, nr_przedmiotu FK, dzien, ocena, obecnosc,inne}

Mysle raczej nad dodaniem atrubutu {czas_wystaswienia} //w znaczeniu godzina:minuta:sekunda
wowczas po 3 postaci normalnym mialbym:
{(Dzien, czas_wystawienia, nr_ucznia) PK, Ocena}
i
{(Nr_przedmiotu(FK),nr_ucznia(FK), dzien, czas_wystawienia) PK, Obecnosc,Kolokwium,Inne,nr_prowadz (FK)} //czas_wystawienia po to, ze w jednym dniu mogą byc 2 zajecia tego samego pzredmiotu

pozostale 3 tabele jak w pomysle z AutoID

Jak myslicie?

EDIT2

Pomysł z polem Czas_wystawienia jest chybiony z uwagi na to, ze czas wystawienia oceny byłby także czasem sprawdzania obecnosci.
Modyfikacja bazy polega na dodaniu 2 pól, pola "ID_rekord", które rozroznia te same oceny, na tych samych zajeciach oraz pole "Godzina_zajec" (2 cyfr), które bedzie odpowiadało za rozróznianie ewnetualnych podwójnych zajec tego samego dnia.

W 3 postaci normalnej wyglada to tak:

{(Dzien, nr_ucznia,ID_rekordu) PK, Ocena}
{(Nr_przedmiotu(FK),nr_ucznia(FK), dzien, godzina_zajec) PK, Obecnosc, Kolokwium, Inne_uwagi, ID_prowadz FK}
{Nr_ucznia PK, Imie_ucznia,Nazwisko_ucznia,Semestr}
{Nr_prowadzacego PK, imie_prowadz, nazwisk_proawdzac}
{Nr_przedmiotu PK, nazwa_pzredmiotu}

Problem jednak pojawia się inny...zastaanawielm się nad nim juz ponad 2 godziny smile.gif


W Tabeli3 czescia klucza podst jest "godzina_zajec" a w tabeli tabela1 "Rekord_ID", problem w tym,ze te pola nie są powiązane z zadnym innym - i nie będą, tabele niektre bede laczyl czescia klucza podstawowego :/

Powyzszy schemat działa 'w praktyce', ale czy to nie jest blad projektowania bazy, przez ktory pozniej wsyztko sie wykrzaczy :/
miska
Jak tak bardzo chcesz normalizowac to ja bym rozbił jeszcze :semestry.
Godzina zajęć jeśli wogóle potrzebna wywalił bym do TABELI 1

Reszta wydaje mi sie ok.
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.