Prosta uczelnia (przykładowy projekt) Autor: Jan Kowalski nr indeksu: 123456
Opis problemu Projekt ten ma na celu stworzenie systemu do przechowywania i obróbki danych o wynikach egzaminacyjnych około 2345 studentów z 234 przedmiotów proponowanych na pięciu wydziałach uczelni X. Ze względu na interdyscyplinarny charakter studiów na uczelni X każdy student ma możliwość studiowania i bycia egzaminowanym z przedmiotów oferowanych przez różne wydziały. W związku z tym zaistniała konieczność stworzenia opisywanego systemu, gdyż powstałe do tej pory rozwiązania nie spełniają wymagań uczelni X. Projektowany system będzie umożliwiać dodawanie i modyfikowanie istniejących danych przy pomocy przyjaznej użytkownikowi aplikacji klienckiej działającej w środowisku wielostanowiskowym (maksymalnie dwa stanowiska). Dodatkowo w systemie zrealizowane będą pewne mechanizmy raportowania: statystyki wyników studentów i inne bardzo potrzebne do działania uczelni raporty. Przy realizacji projektu wykorzystany zostanie serwer SQL Microsoft SQL Server Express Edition 2005, a aplikacja kliencka oparta będzie na architekturze Microsoft.NET Framework 2.0. (i tak dalej... ale nie za dużo... )
Diagram ER nazwisko adres punkty nazwa N N imie STUDENT EGZAMINY PRZEDMIOT nr_indeksu ocena data adres Typ jednostki STUDENT(nr indeksu, imie, nazwisko, adres): WYDZ_PRZED WYDZIAL nazwa nr indeksu atrybut kluczowy (klucz), łańcuch znakowy długości sześciu znaków 0-9, imie łańcuch znakowy długości 30 znaków, nie może zawierać wartości NULL, nazwisko łańcuch znakowy długości 30 znaków, nie może zawierać wartości NULL, adres łańcuch znakowy długości 30 znaków, może zawierać wartość NULL. Typ jednostki PRZEDMIOT(symbol, nazwa, punkty): symbol atrybut kluczowy (klucz), łańcuch znakowy długości trzech znaków A-Z, nazwa łańcuch znakowy długości 30 znaków, nie może zawierać wartości NULL, punkty liczba całkowita od 0 do 8, nie może zawierać wartości NULL. Typ jednostki WYDZIAL(id, nazwa, adres): id atrybut kluczowy (klucz), unikatowy identyfikator typu uniqueidentifier, nazwa łańcuch znakowy długości 30 znaków, nie może zawierać wartości NULL, adres łańcuch znakowy długości 30 znaków, może zawierać wartość NULL. Typy zdefiniowanych związków: symbol EGZAMIN(ocena, data) (jasne co reprezentuje ten związek; jeśli nie tu można coś napisać... ): ocena liczba rzeczywista ze zbioru {2, 3, 3.5, 4, 4.5, 5}, może zawierać wartość NULL, data może zawierać wartość NULL. WYDZ PRZED (jasne co reprezentuje ten związek; jeśli nie tu można coś napisać... ): brak własnych atrybutów. N 1 id
Reprezentacja tabelaryczna 1. STUDENCI(nr indeksu, imie, nazwisko, adres), 2. PRZEDMIOTY(symbol, nazwa, punkty, id wydzialu), (koniecznie zaznaczamy klucze obce!) 3. WYDZIALY(id, nazwa, adres), 4. EGZAMINY(nr indeksu, symbol, ocena, data) Ad. 1. Kluczem głównym jest: nr indeksu. Z założenia każdy nowy student otrzymuje kolejny nie zajęty numer indeksu. Jeżeli z niewiadomych przyczyn adres studenta nie jest znany w celu umożliwienia mu odebrania ewentualnej korespondencji adres ustawiany jest na domyślną wartość skrzynka w rektoracie. W tabeli STUDENCI istnieje predefiniowany student o imieniu Jan i nazwisku Kowalski oraz numerze indeksu 000000 student ten będzie automatycznie zapisywany na egzamin z każdego nowo utworzonego przedmiotu (jest to sztuczne założenie pozwalające zapewnić zgodność modelu ER z implementacją w momencie tworzenia nowego przedmiotu; można to oczywiście rozwiązać inaczej (patrz poniżej przykład tabeli WYDZIALY) jednak trzeba być świadomym tej możliwej rozbieżności). Student o indeksie 000000 nie będzie brany pod uwagę przy generowaniu jakichkolwiek raportów! Ad. 2. Kluczem głównym jest: symbol. Kluczem obcym jest: id wydzialu odpowiadający polu id w tabeli WYDZIALY. Z założenia każdy nowo utworzony przedmiot ma co najmniej dwa punkty jeśli nie zostanie to inaczej określone przy jego dodawaniu do bazy. Domyślnie na egzamin z każdego przedmiotu jest zapisany co najmniej jeden student (w najgorszym razie jest to student 000000). Nie zakładamy, żadnych odstępstw od określonego w modelu ER całkowitego uczestnictwa jednostki PRZEDMIOT w związku WYDZ PRZED, to znaczy nie dopuszczamy takiej sytuacji, aby przedmiot istniał bez wydziału! Ad. 3. Kluczem głównym jest: id. Zakładamy odstępstwo od modelu ER w tym sensie, że nowo utworzony wydział nie musi z początku oferować jakichkolwiek przedmiotów. Wydział taki nie będzie brany jednak pod uwagę w jakichkolwiek zestawieniach danych z bazy. Ad. 4. Kluczem głównym jest para: symbol, nr indeksu. Kluczami obcymi są: symbol odpowiadający polu symbol w tabeli PRZEDMIOTY oraz nr indeksu odpowiadający polu nr indeksu w tabeli STUDENCI.
Z założenia każdy student zapisany na egzamin z danego przedmiotu ma domyślnie w polu ocena wpisaną wartość NULLco oznacza, że nie zdawał jeszcze egzaminu, jak również w polu data znajduje się wartość NULLdo czasu przystąpienia do egzaminu.
Mechanizmy bazy danych W tym miejscu należy napisać jakie mechanizmy miałby się znaleźć w projektowanej bazie, na przykład: Dla każdej tabeli w bazie danych zostanie utworzona tabela jej odpowiadająca o nazwie {nazwa tabeli} historyczna, do której kopiowane będą usuwane dane z tabeli {nazwa tabeli}; każda taka tabela bedzie zawierała dodatkowo pole z datą wykonanai operacji wstawienia danej. Powstałe kopie danych nie będą powiązane ze sobą zaprojektowanymi więzami integralności (klucze główne, klucze obce, itd.). Sam mechanizm przenoszenia danych będzie zrealizowany przy pomocy właściwej procedury samowyzwalanej (trigger typu FORDELETE). (i tym podobne... co nie znaczy, że podczas implementacji projektu nie można dodać kolejnych bajeranckich mechanizmów)