Database Diagram - SQL Server Management

0

Witam
Nigdy nie projektowałem diagramów bazy w programach typu SQL Server Management, zawsze posługiwałem się zapytaniami (bez kluczy i diagramów)
Czy taka sporządzony diagram bazy danych będzie poprawny ?
[URL=http://img34.imageshack.us/my.php?image=wirtualnydziennik.jpg][IMG]http://img34.imageshack.us/img34/7908/wirtualnydziennik.th.jpg[/IMG][/URL]
[url=http://img34.imageshack.us/my.php?image=wirtualnydziennik.jpg][img=http://img34.imageshack.us/img34/7908/wirtualnydziennik.th.jpg][/url]

0

Wklejam jeszcze raz linka do obrazku = za pierwszym razem się coś nie udało
user image

0

Ładnie roz*** layout strony. Współczuć tylko tym, którzy mają rozdzielczość mniejszą niż moje 1680. Linkuj, a nie wklejaj :|

  1. Klasa to chyba ma wychowawcę, a nie nauczyciela i IdWychowawcy należałoby to połączyć z tabelą Nauczyciele.
  2. Godzina wystawienia oceny? Po co takie coś?
  3. Co ma być w tabeli OpisOceny, że wydzieliłeś ją?
  4. Jeśli użyłeś dobrych typów danych, to reszta chyba dobrze.
0

ad.1 tak chodzi o wychowawce, ale wychowawca to też nauczyciel, więc zmienie tylko później w Visualu jak będe wyświetlać w opcjach caption na wychwawca, żeby wyświetlało to pole jako wychowawca
ad.2 no godzina może faktycznie nie potrzebna :-)
ad.3 do opisu oceny będzie można wstawić czy jest to ocena ze sprawdzianu czy normalna
ad.4 typy danych są dobre

Jeszcze mam dylemat czy w tabeli Ocena pole IdPrzedmiotu powinno być oznaczone jako primery key?
Zastanawiam się czy IdPrzemdmiotu z tabeli Oceny nie powinno być bez primery key i powiązane z IdPrzedmiotu z tabeli Przedmioty, w relacji wiele do jeden (wiele ocen z jednego przedmiotu).

Z góry dzięki za pomoc

0

Hallo diagram_man!

Mysle, ze w tabeli Ocena brakuje IdOceny, ktore kowinno byc w niej kluczem (a nie IdPrzedmiotu).

Pozdrawiam
Markus
:-)

0

Moim zdaniem nie ma potrzeby żeby umieszczać w tabeli oceny, idOceny. Tylko dalej nie wiem czy dobrze będzie jeśli zrobię, tak jak pisałem post wyżej.

1

Hallo diagram_man!

diagram_man napisał(a)

Moim zdaniem nie ma potrzeby żeby umieszczać w tabeli oceny, idOceny. Tylko dalej nie wiem czy dobrze będzie jeśli zrobię, tak jak pisałem post wyżej.

  1. Jak wynika z Twojego diagramu tabela ocena ma jednoznaczny klucz: IdPrzedmiotu. W tej konstelacji bedziesz mogl do tabeli ocena wpisac jedna i tylko jedna ocene na przedmiot.

  2. IdOceny jest przewidzane do identyfikacji oceny. W szkole wystawia sie dzesiatki ocen dzennie. Dlatego kazda musi byc jednoznacznie identyfikowalna. 5 Jacka, ktora dostal z matematyki we wtorek ma IdOceny 231567. A inna 5 tegoz Jacka, ktora dostal z matematyki w piatek ma IdOceny 237899. Tym sposobem te dwie piatki sa jednoznacznie identyfikowalne.

Pozdrawiam
Markus
:-)

0

Poprawiłem teraz z tą oceną - teraz powinno być dobrze. Dodałem jeszcze parę relacji, których wcześniej nie było. Mam nadzieję, że są poprawne :-)

Miałem problem bo w tabeli Klasa chciałem zrobić pole IdNauczyciela również jako primery key, tak żeby było w relacji 1:1 z IdNauczyciela z tabeli Nauczyciel. Tak że gdy przypiszemy jakiegoś nauczyciela(wychowawce) do klasy to nie może on być przypisany do innej. Pojawiał się jakiś błąd że liczba kolumn się nie zgadza - czy coś podobnego-nie dało się utworzyć tej relacji. W końcu zostawiłem taką relację jak widać na załączonym obrazku- czyli jeden nauczyciel może być wychowawcą w kilku klasach.

A co do umieszczenia IdOceny w tabeli Oceny, to myślę że to nie będzie miało później praktycznego zastosowania- wyszukiwać oceny będzie się po IdUcznia + IdPrzedmiotu, więc nie widzę zastosowania dla IdOceny :-)

user image

0

Miałem problem bo w tabeli Klasa chciałem zrobić pole IdNauczyciela również jako primery key, tak żeby było w relacji 1:1 z IdNauczyciela z tabeli Nauczyciel.

A to nie jest czasem tak, że jedna tabela może mieć jeden klucz główny?

A co do umieszczenia IdOceny w tabeli Oceny, to myślę że to nie będzie miało później praktycznego zastosowania- wyszukiwać oceny będzie się po IdUcznia + IdPrzedmiotu, więc nie widzę zastosowania dla IdOceny

Nie wiem, czy to dobre podejście. Jeden uczeń może mieć kilka identycznych ocen z jednego przedmiotu, co wtedy? Jak będzie zrealizowana edycja bądź usuwanie ocen? Ja bym napisał procedurę, która przyjmuje id i to robi, a Ty będziesz porównywał kilka wartości?

Co w sytuacji, gdy jeden nauczyciel uczy kilku przedmiotów?

Robisz printscreeny tych diagramów? Przecież diagram możesz normalnie zapisać z poziomu Management Studio ;)

0

A to nie jest czasem tak, że jedna tabela może mieć jeden klucz główny?

Chyba tak jest, z tąd ten błąd.

A co do usuwania tych ocen to chyba masz rację :-)
Czy jeśli zrobię tak, jak na poniższym obrazku i w polu RULE Delete ustawie na CASCADE między W_Oceny, a Ocena to będzie ok ?
user image

I jeszcze co do tego, że jeden nauczyciel może uczyć wielu przedmiotów.
Ja mam uwzględnione, że jeden przedmiot może być uczony przez wielu nauczycieli, ale właśnie nie mogę wpaść jak to rozwiązać żeby dany nauczyciel mógł uczyć kilku przedmiotów- jakaś podpowiedź ?

0

Chyba będę musiał się zarejestrować, bo edytować nie mogę postu.
Po umieszczeniu no forum zobaczyłem że jednak tak to musi chyba być:
user image

0

Czy jeśli zrobię tak, jak na poniższym obrazku i w polu RULE Delete ustawie na CASCADE między W_Oceny, a Ocena to będzie ok ?

Tylko po co tak? Nie możesz mieć idOceny i wartosciOceny w jednej tabeli? :|

ale właśnie nie mogę wpaść jak to rozwiązać żeby dany nauczyciel mógł uczyć kilku przedmiotów- jakaś podpowiedź ?

Tabela pomocnicza np. Nauczyciele_Przedmioty z kolumnami idNauczyciela i idPrzedmiotu. Wtedy będziesz mógł dowolnie wiązać nauczycieli z przedmiotami.

0

Hallo diagram_man!

Klucz IdOceny mimo, ze nie jest bledem, to rzeczywiscie jest kwiatkiem do korzucha. Bo przeciez czym sie rozni 5 Jacka z matematyki u pana Nowaka od innej 5 tegoz samego Jacka z matematyki u tegoz samego pana Nowaka? Moze tylko tym ze jedna dostal z algebry a druga z geometrii. Ale ta informacje mozna umiescic w polu uwaga albo opis. Dlatego tez mysle, ze tabele ocena mozna jednak konstruowac bez PK.;-)

W zwiazku z tym moze cos takiego Ci sie spodoba: Diagram

Pozdrawiam
Markus
:-)

0
MarkusB napisał(a)

Dlatego tez mysle, ze tabele ocena mozna jednak konstruowac bez PK.;-)

To teraz Ty mi wyjaśnij jak w takim razie zrealizować np. usuwanie bądź edycję, czy cokolwiek innego, co wymaga wybrania konkretnego rekordu?

0

Skonstruowałem z waszą pomocą poniższy diagram. Myślę, że teraz powinien być dobry. Jeśli coś przeoczyłem to proszę pisać.
user image

0

Hallo somekind!

somekind napisał(a)
MarkusB napisał(a)

Dlatego tez mysle, ze tabele ocena mozna jednak konstruowac bez PK.;-)

To teraz Ty mi wyjaśnij jak w takim razie zrealizować np. usuwanie bądź edycję, czy cokolwiek innego, co wymaga wybrania konkretnego rekordu?

Problemem jest jednoznaczna identyfikacja oceny. Trzeba tabele ocena tak skonstruowac aby ilosc kolumn i informacje w nich zawarte umozliwialy jednoznaczna identyfikacje recordu w tablicy ocena.

Mam tu na mysli mniej wiecej cos takiego:

Jacek otrzymal we wtorek 5 z matematyki u pana Nowaka w dziale geometrii.

W tym zdaniu mamy:
uczen: Jacek
przedmiot: matematyka
nauczyciel: pan Nowak
nota: 5
dzial: geometria

pseudo code:
delete from ocena where uczen = 'jacek' and przedmiot = "matamatyka" ... itd.

Czy mozliwe jest, ze Jacek otrzyma w jednym dniu taka sama ocene z jednego przedmiotu u jednego nauczyciela zjednego dzialu? Mozliwe, bo np Jacek moze otrzymac jedna 5 ze sprawdzianu i druga 5 z pracy domowej a moze jeszcze trzecia 5 z udzalu w lekcji i wszystkie one we wtorek, z matamatyki, u pana Nowaka i w dziale geometria. W tym wypadku nalezaloby rozszerzyc tabele ocena o dodatkowa kolumne "xyz", w ktorej bylaby zawarta informacja za co Jacek dostal ocene.

Mysle, ze malo prawdopodobne jest, ze Jacek otrzyma we wtorek kilka 5 z matamatyki, u pana Nowaka, w dziale geometria za udzial w lekcji.

Pozdrawiam
Markus
:-)

PS.: Jasne jest, ze latwiej jest identyfikowac recordy poprzez PK (np. IdOceny) niezaleznie od informacji zawartej w rekordzie. A tak "by the way": IdOceny proponowalem juz w porzednim poscie.

0
MarkusB napisał(a)

pseudo code:
delete from ocena where uczen = 'jacek' and przedmiot = "matamatyka" ... itd.

Majtki też przez głowę zakładasz?

MarkusB napisał(a)

PS.: Jasne jest, ze latwiej jest identyfikowac recordy poprzez PK (np. IdOceny) niezaleznie od informacji zawartej w rekordzie. A tak "by the way": IdOceny proponowalem juz w porzednim poscie.

To się zdecyduj wreszcie, bo zaraz ktoś Cię tu nazwie "człowiekiem-miesiączką" ;)

Po co się pierniczyć w milion różnorodnych warunków skoro można jednoznacznie identyfikować rekord jednym polem?
I to nie tylko upraszcza zapytanie usuwające (a jak coś jest proste, to trudniej popełnić w tym błąd), ale także pozwala ograniczyć ilość przesyłanych danych (w szczególnym przypadku ruch sieciowy). A w przypadku dodania/usunięcia kolumn usuwanie nadal będzie działać, więc jest też bardziej przyszłościowe.

Nie wiem jak Ty, ale ja jestem cholernie leniwy. Dlatego wolę sobie upraszczać życie :)

0

Hallo somekind!

somekind napisał(a)

...
Po co się pierniczyć w milion różnorodnych warunków skoro można jednoznacznie identyfikować rekord jednym polem?
...

Niestety jest to nieuniknione, poniewaz pan Nowak z pewnoscia nie panieta ze 5 Jacka z matematyki, ktora dostal we wtorek z matematyki w dzedzine geometrii za prace domowa ma IdOceny 254328675. Tak wiec zeby odnaleŹć w tabeli wlasciwa ocene, pan Nowak musi wiedziec duzo wiecej niz tylko IdOceny.

Pozdrawiam
Markus
:-)

0

Perełka?

To chyba normalne, że użytkownicy systemu nie znają id rekordów w bazie :|

0

@MarkusB - zgadzam się z Twoją opinią, że ocena powinna mieć jakikolwiek opis może nawet rodzaj (kartkówka, praca domowa, odpowiedź ustna itp..). Jednak do identyfikacji w bazie w tym usuwania rekordów powinno służyć tylko i wyłącznie pole id. Dlaczego? Bo użyszkodnik może nadal wpisać identyczny opis (unique na tym polu byłby bez sensu) do obu ocen i usuwając rekordy w sposób jaki proponujesz usunąłby i tak wszystkie takie oceny...

0

Kilka uwag:

  1. Cała tabela "OpisOceny" jest zbędna. Ocena sama w sobie jest wartością skalarną i przekładanie jej do osobnej tabeli jest przesadną "normalizacją". Zapewne pole "OpisOceny" znalazł się tam przez przypadek, byle by tylko tabele nie zawierała samego klucza :). .. Nawet jeśli zajdzie potrzeba nazwania oceny - można się posłużyć zwykłą funkcją.

  2. Pole IdKlasy w tabeli Uczen wg mnie nie pasuje. Lepiej zrobić relację wiele do wielu, która zawiera:

Id Klasy <> Id Ucznia (i PK ustawione na oba te pola)

1 użytkowników online, w tym zalogowanych: 0, gości: 1