KATOLICKI UNIWERSYTET LUBELSKI Projekt Bazy Danych Maciej Lis 2009 KATOLICKI UNIWERSYTET LUBELSKI 2009 Projekt Bazy Danych Spis treści 1 Wstęp ..................................................... 3 2 Postacie normalne ......................................... 3 2.1 Pierwsza postać normalna ............................... 3 2.2 Druga postać normalna .................................. 4 2.3 Trzecia postać normalna ................................ 4 3 Analiza wymagań ........................................... 5 4 Definiowanie tabel ........................................ 5 4.1 Użytkownicy ............................................ 5 4.1.1 Nazwy kolumn........................................ 5 4.2 Wiadomości prywatne .................................... 6 4.2.1 Nazwy kolumn........................................ 6 4.3 Grupy użytkowników ..................................... 6 4.3.1 Nazwy kolumn........................................ 7 4.4 Użytkownicy do Grupy Użytkowników ...................... 7 4.4.1 Nazwy kolumn........................................ 7 4.5 Posty.................................................. 7 4.5.1 Nazwy kolumn........................................ 7 4.6 Fora................................................... 8 4.6.1 Nazwy kolumn........................................ 8 4.7 Prawa do forów ......................................... 9 4.7.1 Nazwy kolumn........................................ 9 5 Model bazy danych ....................................... 10 Katolicki Uniwersytet Lubelski Strona 2 2009 Projekt Bazy Danych 1 Wstęp Tematem referatu jest przedstawienie projektu bazy danych dla forum internetowego. bezpiecznego, Celem elastycznego, jest oraz stworzenie zgodnego ze szybkiego, standardami (postaci normalnymi) modelu. 2 Postacie normalne Postacie normalne (ang. normal forms lub NF) mają za zadanie nie dopuścić do błędów w projektowaniu modelu bazy danych. Określają jak powinno się wyeliminować powtarzające się dane, aby baza zajmowała mniej miejsca, była szybsza i elastyczniejsza. 2.1 Pierwsza postać normalna Relacja jest w pierwszej postaci normalnej, gdy wartości atrybutów są elementarne. Czyli nie występuje sytuacja gdzie wymienia się dane po przecinku. Zasada: „Jedna wartość w jednym atrybucie”. Rysunek 2.1 – Pierwsza postać normalna Katolicki Uniwersytet Lubelski Strona 3 2009 Projekt Bazy Danych 2.2 Druga postać normalna Aby relacja była w drugiej postaci normalnej musi spełnić dwa warunki. Być już w pierwszej postaci normalnej, oraz każdy rekord powinien zależeć wyłącznie od klucza podstawowego. Tak więc powinno się utworzyć oddzielne tabele dla powtarzających się danych, i powiązać tą tabele za pomocą klucza obcego z tabelami które powinny posiadać te dane. Klienci imie nazwisko adresMiasto adresUlica Wysyłka data adresMiasto adresUlica Rysunek 2.1 - Błędne rozmieszczenie danych Klienci FK1 IDAdresu imie nazwisko Adresy PK Wysyłka FK1 IDAdresu miasto ulica IDAdresu data Rysunek 2.2 - Rozmieszczenie zgodne z drugą postacią normalną 2.3 Trzecia postać normalna Relacja jest w trzeciej postaci normalnej wtedy i tylko wtedy gdy jest w II postaci normalnej i kolumny są w bezpośredniej zależności funkcyjnej jedynie od klucza głównego. Oznacza to np. że jeśli w encji (tabeli) cena owocu zależy od nazwy owocu Katolicki Uniwersytet Lubelski Strona 4 2009 Projekt Bazy Danych to powinno się stworzyć osobną tabele z owocami i adekwatnymi do nich cenami. 3 Analiza wymagań Podstawowe założenia i wymagania: możliwość rejestracji na forum autoryzacja użytkowników użytkownicy z różnymi prawami(grupy użytkowników) grupowanie tematów tworzenie tematów przez zarejestrowanych użytkowników możliwość odpowiedzi na utworzony temat profile użytkowników wiadomości prywatne ignorowanie tematów 4 Definiowanie tabel 4.1 Użytkownicy Encja użytkownicy będzie zawierała dane odnośnie użytkowników zarejestrowanych na forum. 4.1.1 Nazwy kolumn UzytkownikID – określa jednoznacznie poszczególny wiersz encji; Wiele innych tabel będzie się odnosiło do tego parametru, Login – określa login jaki osoba ma na forum; Login również jednoznacznie określa poszczególny rekord, Imie – imię użytkownika, DrugieImie – drugie imię użytkownika; Wartość ta nie jest obowiązkowa, Katolicki Uniwersytet Lubelski Strona 5 2009 Projekt Bazy Danych Nazwisko – nazwisko użytkownika, Haslo – zawiera hasło użytkownika zakodowane za pomocą szyfru MD5 dlatego zawiera 32 bajty, Email – pole zawiera email; Wartość jest wymagana do poprawnej rejestracji na forum, GaduGadu – określa komunikator internetowy; Pole nie jest wymagane, ICQ – określa drugi komunikator internetowy; Podobnie jak poprzednio pole nie jest wymagane. 4.2 Wiadomości prywatne Encja zawiera rekordy, z czego każdy to jedna wiadomość. Wiadomości mogą być wysyłane jedynie do jednej osoby, choć relacja może w przyszłości być rozbudowana o dodatkową tabele zamieniając relacje z jeden do wielu na wiele do wielu. 4.2.1 Nazwy kolumn WiadomoscID – określa jednoznacznie poszczególny wiersz encji, Temat – określa temat wiadomości; Wiadomość bez tematu nie może być wysłana, OdUzytkownikaID – określa kto jest nadawcą widomości. Zawiera klucz obcy do tabeli Uzytkownicy, DoUzytkownikaID - określa kto jest odbiorcą widomości. Zawiera klucz obcy do tabeli Uzytkownicy, Tekst – treść wiadomości, DataWyslania – data wysłania wiadomości; Potrzebna również do sortowania wiadomości. 4.3 Grupy użytkowników Encja zawiera rekordy, z czego każdy to jedna grupa. Dzięki relacji wiele do wielu Katolicki zrealizowanej Uniwersytet za pomocą Lubelski tabeli Strona 6 2009 Projekt Bazy Danych pomocniczej Uzytkownicy_GrupyUzytkownikow pozwala na przynależność jednego użytkownika do więcej niż jednej grupy. 4.3.1 Nazwy kolumn GrupaID – określa jednoznacznie poszczególny wiersz encji, Nazwa – określa nazwę grupy np. Administratorzy, Przyjaciele, Opis – nieobowiązkowy opis grupy, ZalozycielID – klucz obcy odnoszący się do tabeli Uzytkownicy; Określa osobę która założyła daną grupę. 4.4 Użytkownicy do Grupy Użytkowników Tabela jest encją pomocniczą dzięki której jeden użytkownik może należeć do wielu grup, oraz jedna grupa może mieć wiele użytkowników. 4.4.1 Nazwy kolumn UzytkownikID – klucz obcy odpowiadający jednemu rekordowi w encji Uzytkownicy, GrupaID – klucz obcy odpowiadający jednemu rekordowi w encji GrupyUzytkownikow. 4.5 Posty Encja zawiera rekordy, z czego każdy to jeden post. Każdy post może być wysłany przez jedną osobę i właśnie do niej się odnosi. 4.5.1 Nazwy kolumn PostID – klucz podstawowy jednoznacznie identyfikujący każdy rekord, TematID – klucz obcy odnoszący się do kolumny PostID własnej encji; Przyjmuje wartość NULL, gdy jest pierwszym postem danego tematu, Katolicki Uniwersytet Lubelski Strona 7 2009 Projekt Bazy Danych ForumID – klucz obcy odnoszący się do encji Fora, dzięki czemu identyfikuje Przyjmuje danego wartość post NULL, tematu; do gdy Kolejne jakiego nie jest posty forum należy; pierwszym mają postem automatycznie przypisane fora dzięki odnośnikowi TematID; WlascicielID – klucz obcy odnoszący się do encji Uzytkownicy, wskazując kto jest napisał posta, Tekst – treść posta, DataPowstania – data wysłania posta na forum, DataOstatniejEdycji – określa kiedy ostatnio był modyfikowany dany post; Przyjmuje wartość NULL, gdy nie był modyfikowany, IloscEdycji – określa ile razy był modyfikowany dany post, Temat – każdy post nie tylko pierwszy może zawierać temat wiadomości, aby łatwiej można było przeglądać posty. 4.6 Fora Forum może być pogrupowane na różne pod fora, dzięki czemu łatwiej można odszukać wiadomości i forum jest bardziej uporządkowane. 4.6.1 Nazwy kolumn ForumID – klucz podstawowy jednoznacznie identyfikujący każdy rekord, Nazwa – zawiera nazwę danego pod forum, Ilość wiadomości – zawiera ilość wiadomości należących do danego pod forum; Oczywiście tę ilość można uzyskać grupując wiadomości w encji Posty, ale byłoby to mało efektywne. Katolicki Uniwersytet Lubelski Strona 8 2009 Projekt Bazy Danych 4.7 Prawa do forów Encja określa jakie prawa dostępu do forów mają użytkownicy należący do danych grup. Jest tabelą pomocniczą dzięki której jedna grupa może mieć prawa do wielu forów, oraz jedno forum może mieć przyporządkowane wiele grup użytkowników. 4.7.1 Nazwy kolumn ForumID – klucz obcy do encji Fora, GrupaID - Klucz obcy do encji GrupyUzytkownikow. Katolicki Uniwersytet Lubelski Strona 9 2009 Projekt Bazy Danych 5 Model bazy danych Uzytkownicy Column Name Data Type WiadomosciPrywatne Nullable UzytkownikID int No Login nvarchar(20) No Imie nvarchar(50) No DrugieImie nvarchar(50) Yes Nazwisko nvarchar(50) No Haslo varchar(32) No Email nvarchar(50) No GaduGadu nvarchar(12) Yes ICQ nvarchar(12) Yes Column Name Data Type Nullable WiadomoscID int No Temat nvarchar(50) No OdUzytkownikaID int No DoUzytkownikaID int No Tekst text No DataWyslania date No GrupyUzytkownikow Column Name Data Type Nullable GrupaID int No Nazwa nvarch... No Opis nvarch... Yes ZalozycielID int No Uzytkownicy_GrupyUzytkownikow UzytkownikID GrupaID Posty PrawaDoForum Column Name Data Type Nullable GrupaID ForumID PostID int No TematID int No ForumID smallint No WlascicielID int No Tekst text No DataPowstania date No Column Name Data Type Nullable DataOstatniejEdycji date Yes ForumID smallint No IloscEdycji smallint No Nazwa nvarch... No Temat nvarchar(50) No IloscWiado... int No Katolicki Fora Uniwersytet Lubelski Strona 10