Projekt logiczny
1. Projekt bazy
2. Słowniki danych
EFUsers – tabela zawierająca dane graczy
Id – PK – Integer – unikalny identyfikator użytkownika NOT NULL
Login – String – unikalny nick użytkownika NOT NULL
PasswordHash – Integer – zakodowane hasło użytkownika NOT NULL
Rank – Integer – liczba określająca miejsce w globalnym rankingu NOT NULL
EFFriends – tabela zawierająca id graczy będących znajomymi
OwnerId – PK, FK – Integer - klucz obcy z tabeli EFUsers NOT NULL
FriendId – PK, FK – Integer - klucz obcy z tabeli EFUsers NOT NULL
EFMoves – tabela zawierająca dane każdego ruchu gracza
MoveId – PK – Integer –identyfikator ruchu NOT NULL
GameId – PK, FK – Integer - klucz obcy z tabeli EFGames NOT NULL
UserId – FK - Integer - klucz obcy z tabeli EFUsers NOT NULL
Word – String – pole tekstowe zawierające słowo w wykonanym ruchu
Row – Integer - numer wiersza pierwszej litery słowa
Col – Integer - numer kolumny pierwszej litery
IsHorizontal – BOOL – określa orientację słowa (poziomo = TRUE, pionowo = FALSE)
MoveType – Integer – pole enum określające typ ruchu
EFGames – tabela zawierająca informacje o ruchach w danej partii
Id – PK – Integer – unikalny identyfikator gry NOT NULL
Date – DateTime - pole zawierające date i godzinę rozpoczęcia gry NOT NULL
Language - String - pole tekstowe opisujące wybrany język gry NOT NULL
TimePerPlayer - Integer - liczba opisująca czas, który upłynął w kolejce danego gracza. Liczony w sekundach NOT NULL
EFParticipants – id graczy danej gry
UserId – PK, FK – Integer - klucz obcy z tabeli EFUsers NOT NULL
GameId – PK, FK – Integer - klucz obcy z tabeli EFGames NOT NULL
EFPendingMessages – tabela przechowująca dane wiadomości prywatnych, których adresatem jest gracz offline (id graczy, treść wiadomości)
Id – PK – Integer – unikalny identyfikator wiadomości NOT NULL
SenderId – FK – Integer - klucz obcy z tabeli EFUsers NOT NULL
ReceiverId – FK – Integer - klucz obcy z tabeli EFUsers NOT NULL
Date – DateTime - pole zawierające date i godzinę wysłania wiadomości NOT NULL
Message – String – treść wiadomości NOT NULL
EFSentMessages – zawiera takie same pola jak tabela EFPendingMessages, jednak służy do przechowywania odebranych wiadomości prywatnych
3. Analiza zależności funkcyjnych i normalizacja tabel
Wszystkie wartości atrybutów są atomowe. Warunek 1NF jest zatem spełniony
Warunek 2NF spełniony, ponieważ spełniony jest warunek 1NF, oraz dla zdefiniowanych kluczy nie istnieją podzbiory atrybutów podstawowych, które identyfikują atrybuty wtórne.
Nie jest spełnione ponieważ występuje zależność częściowa (zależność X → A, gdy X jest właściwym podzbiorem pewnego klucza)
4. Projektowanie operacji na danych
Scrabble wykorzystują bibliotekę EntityFramework do komunikacji z bazą danych. Ułatwia to w dużej mierze komunikację.
Projekt Scrabble wykorzystuje bibliotekę Entity Framework do komunikacji z bazą danych. Entity Framework jest narzędziem typu ORM (ang. Object Relational Mapping). Pozwala ono na budowanie aplikacji dwuwarstwowych i trójwarstwowych.
Przykładowe użycie framework'a:
1) Opis
Dodanie nowego użytkownika do bazy EFUsers wraz z ustalonymi wartościami rekordów
2) Enitity Framework
EFUser user = new EFUser();
user.Login = name;
user.PasswordHash = newPassHash;
user.Id = newId;
user.Rank = 1000;
try
{
// Entity framework generuje zapytanie SQL
context.EFUsers.AddObject(user);
context.SaveChanges();
p = new Person() { Name = user.Login, Id = user.Id };
}
catch (InvalidOperationException)
{
p = null;
}
3) Generowane zapytanie SQL
INSERT INTO EFUsers (id, Login, PasswordHash, Rank)
VALUES (name, newPassHash, newId, 1000);
Więcej o framework'u pod adresem:
http://msdn.microsoft.com/pl-pl/library/ff714342.aspx