Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:ztb:2011:projekty:osk:logiczny [2011/08/04 21:09] ztb2011 |
pl:dydaktyka:ztb:2011:projekty:osk:logiczny [2019/06/27 15:50] (aktualna) |
====== Projekt logiczny [In Progress]====== | ====== Projekt logiczny ====== |
| |
===== Doprecyzowanie struktury bazy ===== | ===== Doprecyzowanie struktury bazy ===== |
ALTER TABLE "comments" ADD CONSTRAINT "comments_users_fk" FOREIGN KEY ("author") REFERENCES "users"("id") | ALTER TABLE "comments" ADD CONSTRAINT "comments_users_fk" FOREIGN KEY ("author") REFERENCES "users"("id") |
| |
ALTER TABLE "comments" ADD CONSTRAINT "comments_interesting_places_fk" FOREIGN KEY ("place_id") REFERENCES "interesting_places"("id") | ALTER TABLE "comments" ADD CONSTRAINT "comments_interesting_places_fk" FOREIGN KEY ("place_id") REFERENCES "interesting_places"("id") on delete cascade |
| |
ALTER TABLE "interesting_places" ADD CONSTRAINT "interesting_places_types_fk" FOREIGN KEY ("type_id") REFERENCES "types"("id") | ALTER TABLE "interesting_places" ADD CONSTRAINT "interesting_places_types_fk" FOREIGN KEY ("type_id") REFERENCES "types"("id") on delete cascade |
| |
ALTER TABLE "interesting_places" ADD CONSTRAINT "interesting_places_users_fk" FOREIGN KEY ("author") REFERENCES "users"("id") | ALTER TABLE "interesting_places" ADD CONSTRAINT "interesting_places_users_fk" FOREIGN KEY ("author") REFERENCES "users"("id") on delete cascade |
| |
</code> | </code> |
- students - tabela przechowująca studentów | - students - tabela przechowująca studentów |
* user_id - nr id studenta, klucz główny, klucz obcy do tabeli USERS (ID), INTEGER, NOT NULL | * user_id - nr id studenta, klucz główny, klucz obcy do tabeli USERS (ID), INTEGER, NOT NULL |
- theoretical_lessons | - theoretical_lessons - tabela z danymi na temat zajęć teoretycznych |
* id - nr id zajęć teoretycznych, klucz główny, INTEGER, NOT NULL | * id - nr id zajęć teoretycznych, klucz główny, INTEGER, NOT NULL |
* course_id - id kursu, klucz obcy do tabeli COUSRES (ID), INTEGER, NOT NULL | * course_id - id kursu, klucz obcy do tabeli COUSRES (ID), INTEGER, NOT NULL |
* register_date - data rejestracji, TIMESTAMP | * register_date - data rejestracji, TIMESTAMP |
* last_login_date - data ostatniego logowania, TIMESTAMP | * last_login_date - data ostatniego logowania, TIMESTAMP |
| - comments - tabela przechowujaca komentarze użytkowników dotyczące miejsc |
| * id - nr id komentarza, klucz główny, INTEGER, NOT NULL |
| * place_id - id miejsca, klucz obcy do tabeli INTERESTING_PLACES (ID), INTEGER, NOT NULL |
| * comment - treść komentarza, VARCHAR(1024), NOT NULL |
| * author - autro komentarza (jego id), klucz obcy do tabeli USERS (ID), INTEGER |
| * date - data, TIMESTAMP |
| * grade - ocena miejsca, INTEGER |
| - interesting_places - tabela przechowujaca dane dotyczące ciekawych miejsc |
| * id - nr id miejsca, klucz główny, INTEGER, NOT NULL |
| * lattitude - szerokość geograficzna, FLOAT, NOT NULL |
| * longitude - długość geograficzna, FLOAT, NOT NULL |
| * type_id - id typu miejsca, klucz obcy do tabeli TYPES (ID), INTEGER` |
| * description - opis miejsca, VARCHAR(512) |
| * accepted - zmienna określająca, czy miejsce zostało poddane moderacji i zaakceptowane, BOOL, NOT NULL |
| * city - miasto, w którym jest dane miejsce, VARCHAR(32), NOT NULL |
| * author - użytkownik, który dodał miejsce, INTEGER, NOT NULL |
| * date - data dodania, DATE, NOT NULL |
| - types - tabela przechowujaca typy ciekawych miejsc |
| * id - nr id typu, klucz główny, INTEGER, NOT NULL |
| * name - nazwa typu, VARCHAR(256), NOT NULL |
| * longitude - długość geograficzna, FLOAT, NOT NULL |
| * description - opis typu, VARCHAR(1024) |
| |
===== Analiza zależności funkcyjnych i normalizacja tabel ===== | ===== Analiza zależności funkcyjnych i normalizacja tabel ===== |
| //**Pierwsza postać normalna - 1NF**// |
| |
===== Denormalizacja struktury tabel ===== | Wszystkie atrybuty spełniają warunek atomiczności, czyli pierwsza postać normalna jest zachowana. |
| |
| **// |
| Druga postać normalna - 2NF//** |
| |
| Baza jest w pierwszej postaci normalnej i każdy atrybut niekluczowy relacji jest w pełni funkcjonalnie zależny od wszystkich kluczy niezależnych. |
| |
| //**Trzecia postać normalna - 3NF**// |
| |
| Baza jest w drugiej postaci normalnej oraz brak jest w niej przechodnich zależności funkcjonalnych. Spełnia więc warunki 3NF. |
| |
===== Projektowanie operacji na danych ===== | ===== Projektowanie operacji na danych ===== |
| |
| Poniżej przedstawiono przykładowe instrukcje SQL realizujące funkcjonalności systemu. |
| |
** 1. Rejestracja kursanta: ** | ** 1. Rejestracja kursanta: ** |
| |
** 2. Dodawanie kategorii: ** | ** 2. Dodawanie kategorii: ** |
| |
<code> | <code> |
insert into types(id, name, description) values (1, 'Ronda', 'Ronda, na których kursanci najczęściej popełniają błędy'); | insert into types(id, name, description) values (1, 'Ronda', 'Ronda, na których kursanci najczęściej popełniają błędy'); |
</code> | </code> |
| |
** 7. Usuwanie kategorii: ** | ** 7. Usuwanie miejsca: ** |
| |
| <code> |
| delete from interesting_places where id = 423; -- relacje są typu on delete cascade, komentarze do miejsca również się usuną |
| </code> |
| |
| ** 8. Usuwanie kategorii: ** |
| |
| <code> |
| delete from types where id = 123; -- relacje są typu on delete cascade, więc wszystkie miejsca kategorii również się usuną (wraz z komentarzami) |
| </code> |
| |
| ** 9. Wyszukiwanie miejsc w pewnym obszarze: ** |
| |
<code> | <code> |
delete from types where id = 123; -- relacja jest typu on delete cascade, więc wszystkie miejsca kategorii również się usuną | select * from interesting_places where latitude between 50.05 and 52.10 and longitute beetwen 19.95 and 23.10 |
</code> | </code> |
| |