Projektowanie tabel, kluczy, kluczy obcych, powiązań między tabelami, indeksów, etc. w oparciu o zdefiniowany diagram ERD

Projekt bazy

skrypt tworzący:
skrypt tworzący

Słowniki danych

testgroups - tabela definiująca grupy testów

  • group - varchar(64), PK - określa grupę, do której przynależy model testu

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

  • tasktype - varchar(64), PK - klucz główny

actions - tabela zawierająca wykonywane akcje

  • action - varchar(64), PK - klucz główny

objects - tabela przechowująca obiekty na których są wykonywane akcje

  • object - varchar(64), PK - klucz główny

Analiza zależności funkcyjnych i normalizacja tabel

  • 1NF

Wszystkie wartości atrybutów są atomowe, zatem zgodnie z definicją, warunek 1NF dla bazy jest spełniony

  • 2NF

Wszystkie tabele posiadają klucz główny prosty, zatem postać 2NF również jest zachowana.

  • 3NF

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=?
pl/dydaktyka/ztb/2011/projekty/emarking/projekt_logiczny.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0