Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:ztb:2011:projekty:osk:logiczny [2011/08/03 21:57]
ztb2011
pl:dydaktyka:ztb:2011:projekty:osk:logiczny [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
-====== Projekt logiczny ​[In Progress]======+====== Projekt logiczny ======
  
 ===== Doprecyzowanie struktury bazy ===== ===== Doprecyzowanie struktury bazy =====
Linia 267: Linia 267:
 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>​
Linia 355: Linia 355:
       * certificate_number - nr zaświadczenia lekarskiego,​ VARCHAR(10)       * certificate_number - nr zaświadczenia lekarskiego,​ VARCHAR(10)
       * end_date - data zakończenia,​ DATE       * end_date - data zakończenia,​ DATE
-  - students +  - students ​- tabela przechowująca studentów 
-      * user_id +      * 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 +      * id - nr id zajęć teoretycznych,​ klucz główny, INTEGER, NOT NULL 
-      * course_id +      * course_id ​- id kursu, klucz obcy do tabeli COUSRES (ID), INTEGER, NOT NULL 
-      * instructor_id +      * instructor_id ​- id instruktora,​ klucz obcy do tabeli INSTRUCTORS (USER_ID) 
-      * subject +      * subject ​- tematyka, VARCHAR(200) 
-      * date +      * date - data, TIMESTAMP, NOT NULL 
-      * hours +      * hours - czas trwania w godz., INTEGER, NOT NULL 
-      * class+      * class - sala, VARCHAR(5)
   - users - tabela przechowująca dane o użytkownikach aplikacji   - users - tabela przechowująca dane o użytkownikach aplikacji
-      * id - klucz główny, ​integernot null +      * id - klucz główny, ​INTEGERNOT NULL 
-      * username - nazwa użytkownika,​ username VARCHAR(32) ​not null, +      * username - nazwa użytkownika,​ username VARCHAR(32) ​NOT NULL 
-      * pass_sha256 - zaszyfrowane hasło, char(64), ​not null +      * pass_sha256 - zaszyfrowane hasło, char(64), ​NOT NULL 
-      * pass_salt - sól, char(64), not null +      * pass_salt - sól, CHAR(64), NOT NULL 
-      * code_sha256 - char(64) +      * code_sha256 - CHAR(64) 
-      * email - adres e-mail użytkownika, ​varchar(128), ​not null +      * email - adres e-mail użytkownika, ​VARCHAR(128), ​NOT NULL 
-      * phone - nr telefonu, ​varchar(16) +      * phone - nr telefonu, ​VARCHAR(16) 
-      * mobile - nr telefonu komórkowego, ​varchar(16) +      * mobile - nr telefonu komórkowego, ​VARCHAR(16) 
-      * status - status użytkownika,​ odniesienie do tabeli status (ID), integer not null +      * status - status użytkownika,​ odniesienie do tabeli status (ID), INTEGER, NOT NULL 
-      * first_name - imię, ​varchar(64) +      * first_name - imię, ​VARCHAR(64) 
-      * last_name - nazwisko, ​varchar(64) +      * last_name - nazwisko, ​VARCHAR(64) 
-      * pesel - nr pesel, ​char(11) +      * pesel - nr pesel, ​CHAR(11) 
-      * birth_date - data urodzenia, ​date +      * birth_date - data urodzenia, ​DATE 
-      * nationality - narodowość, ​varchar(64) +      * nationality - narodowość, ​VARCHAR(64) 
-      * home_address - odniesienie do tabeli adress (pole ID), integer not null +      * home_address - odniesienie do tabeli adress (pole ID), INTEGER, NOT NULL 
-      * mailing_address - odniesienie do tabeli adress (pole ID), integer +      * mailing_address - odniesienie do tabeli adress (pole ID), INTEGER 
-      * 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: **
 +<​code> ​
 +insert into address (id, street_number,​ street, house_number,​ city, postcode, phone, mobile, email) values(1, '​12b',​ '​Akacjowa',​ '​39C',​ '​Kraków',​ '​30-031',​ null, '​503323332',​ '​mail@gmail.com'​);​
 +insert into users (id, username, pass_sha256,​ pass_salt, code_sha256,​ status, first_name, last_name, pesel, birth_date, nationality,​ home_address,​ mailing_address) values(1, '​login',​ '​fdf9136b1e83481e68f9d94deba79539dd4aee8df5e6d5cb8e38466d24b9d89e',​ '​LIkQyqduKEkKsTCaZAqIFN4gwQtorxzKyXbi24GaBsLUOr6NgDwSGWFozhpS2aLo',​ '​40d6ab39842f7fa95a7c71a528d0885a7ee9b9534d0bd3c2c380fc098d55b25f',​ 1, '​imie',​ '​nazwisko',​ '​82031209214',​ '​1982-03-12',​ '​polskie',​ 1, null);
 +insert into students (id) values(1);
 +</​code>​
 +
 +** 2. Dodawanie kategorii: **
 +
 +<​code>​
 +insert into types(id, name, description) values (1, '​Ronda',​ '​Ronda,​ na których kursanci najczęściej popełniają błędy'​);​
 +</​code>​
 +
 +** 2. Dodawanie miejsca (przez kursanta): **
 +<​code>​
 +insert into interesting_places(id,​ latitude, longitude, type_id, description,​ accepted, city, author, date) values (421, 50.05, 19.95, 1, 'Rondo grzegórzeckie - tutaj najczęściej...',​ false, '​Kraków',​ 1, current_date);​
 +</​code>​
 +
 +** 3. Akceptacja miejsca przez moderatora: **
 +
 +<​code>​
 +update interesting_places set accepted = '​true'​ where  id = 423;
 +</​code>​
 +
 +
 +** 4. Edycja danych miejsca (współrzędne i opis): **
 +
 +<​code>​
 +update interesting_places set latitude = 20.33, longitude = 55.64, description = 'nowy, lepszy opis' where id = 423;
 +</​code>​
 +
 +** 5. Usuwanie miejsca: **
 +
 +<​code>​
 +delete from interesting_places where id = 4224;
 +</​code>​
 +
 +** 6. Dodanie komentarza na temat miejsca: **
 +
 +<​code>​
 +insert into comments(id,​ place_id, comment, author, date, grade) values (23, 523, 'Tutaj oblałem egzamin',​ 4, current_date,​ 5);
 +</​code>​
 +
 +** 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>​
 +select * from interesting_places where latitude between 50.05 and 52.10 and longitute beetwen 19.95 and 23.10
 +</​code>​
  
pl/dydaktyka/ztb/2011/projekty/osk/logiczny.1312401446.txt.gz · ostatnio zmienione: 2019/06/27 15:57 (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