Projektowanie tabel, kluczy, kluczy obcych, powiązań między tabelami, indeksów, etc. w oparciu o zdefiniowany diagram ERD
Słowniki danych
testgroups - tabela definiująca grupy testów
models - tabela zawierająca modele/wzorce egzaminów
modelid - bigserial, PK - klucz główny, id modelu
modelname - varchar(64), NOT NULL - nazwa modelu
group - varchar(64), FK - klucz obcy do testgroups
questions - tabela zawierająca pytania
questionid - bigserial, PK - klucz główny, id pytania
points - smallint, NOT NULL - punktacja pytania
correctanswer - text, NOT NULL - poprawna odpowiedź do pytania (zawierająca słowa klucze dla pytań otwartych)
qmodelid - bigint, NOT NULL, FK - klucz obcy do models
tests - tabela zawierająca oceniane testy
testid - bigserial, PK - id testu
testmodlid - bigint, FK - klucz obcy do models
marked - boolean, default FALSE - boolean ocenienia testu
testimage - OID - przechowuje skan testu
users - tabela przechowująca użytkowników
username - varchar(64), PK - klucz główny, unikalna nazwa użytkownika
password - varchar(64), NOT NULL - hasło
email - varchar(64), NOT NULL - email
lastname - varchar(64), NOT NULL - nazwisko
firstname - varchar(64), NOT NULL - imię
roles - tabela przechowująca role
role - varchar(64), PK - klucz główny
rolename - varchar(64), NOT NULL - nazwa roli
testassignments - tabela zawierająca przypisania użytkowników do ocenianych testów
taid - bigserial, PK - klucz główny, id testassignments
tatestid - bigint, FK - klucz obcy do tests
username - varchar(64), FK - klucz obcy do users
groups - tabela łącznik pomiędzy users a roles
grusername - varchar(64), PK, FK - klucz główny, klucz obcy do users
grrole - varchar(64), FK - klucz obcy do roles
privileges - tabela łącząca roles z tasks
privID - bigserial, PK - klucz główny
proleid - varchar(64), FK - klucz obcy do roles
taskid - bigint, FK - klucz obcy do tasks
tasks - tabela zawierająca uprawnienia/przywileje
taskid - bigserial, PK - klucz główny, id tasks
tasktype - varchar(64), FK - klucz obcy do types
predefined - boolean - zmienna ustawiana na true dla tasków 'podstawowych' - nie usuwalnych.
taction - varchar(64), FK - klucz obcy do actions
tobject - varchar(64), FK - klucz obcy do objects
tprivilegeid - varchar(64), FK - klucz obcy do privileges
types - tabela przechowująca rodzaje typów
actions - tabela zawierająca wykonywane akcje
objects - tabela przechowująca obiekty na których są wykonywane akcje
Analiza zależności funkcyjnych i normalizacja tabel
Wszystkie wartości atrybutów są atomowe, zatem zgodnie z definicją, warunek 1NF dla bazy jest spełniony
Wszystkie tabele posiadają klucz główny prosty, zatem postać 2NF również jest zachowana.
Trzecia postać normalna jest spełniona (nie występują relacje tranzytywne) - pola niebędące kluczami są od klucza bezpośrednio zależne.
Postać 3NF na potrzeby projektu jest w zupełności wystarczająca
Projektowanie operacji na danych
Emarking do komunikacji z bazą wykorzystuje bibliotekę Hibernate służącą do mapowania obiektowo-relacyjnego.
Emarking mapując obiekty DAO z wykorzystaniem HibernateTemplate z pakietu narzędziowego Spring Framework, pozwala w łatwy sposób na tworzenie metod, które operują na bazie za nas
Przykładowo, kod metody pobierającej użytkowników z bazy ma postać
public List<User> getAllUsers()
{
return (List<User>)hibernateTemplate.find("from " + "User");
}
Natomiast zapytanie generowane przez HibernateTemplate wygląda następująco
select group0_.grusername as grusername2_0_, group0_.grrole as grrole2_0_ from groups group0_ where group0_.grusername=?