[[
✎ pl:dydaktyka:sbd:2009:projekty:mpk-gis:projekt_logiczny
]]
aiWiki
Pokaż stronę
Ostatnie zmiany
Indeks
Zaloguj
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== Projekt logiczny ====== ===== -. Projekt tabel, kluczy, kluczy obcych, powiązań między tabelami, indeksów w oparciu o zdefiniowany diagram ERD ===== === Diagram ERD === {{:pl:dydaktyka:sbd:2009:projekty:mpk-gis:bazy_mpk_gis.jpeg|}} Projekt bazy danych w języku SQL: <code sql> CREATE TABLE Stops ( id SERIAL , name varchar(40) UNIQUE NOT NULL, time smallint DEFAULT 0 ,PRIMARY KEY (id) ); CREATE TABLE Small_Stops (id SERIAL, id_stop smallint REFERENCES stops (id), add_information varchar (40), PRIMARY KEY (id)); SELECT AddGeometryColumn('', 'small_stops', 'coordinate', -1, 'POINT', 2); CREATE TABLE Lines (id SERIAL, num Smallint NOT NULL, start_stop Smallint REFERENCES small_stops (id), end_stop Integer REFERENCES small_stops (id), toward BIT(1), PRIMARY KEY (id)); CREATE INDEX num_idx ON lines ( num ); CREATE TABLE Stop_Lines (id serial,id_line Integer REFERENCES lines (id), stop_id Integer REFERENCES small_stops (id), next Integer REFERENCES small_stops (id),PRIMARY KEY (id)); CREATE INDEX id_line_idx ON stop_lines ( id_line ); CREATE TABLE Ways (id_way Smallint NOT NULL UNIQUE, PRIMARY KEY (id_way) ); SELECT AddGeometryColumn('', 'way','line',-1,'LINESTRING',2); CREATE TABLE Route_Lines (id SERIAL, id_line Integer REFERENCES lines (id), id_way Integer REFERENCES ways (id_way), next Integer REFERENCES ways (id_way), PRIMARY KEY (id)); CREATE INDEX id_line_idx2 ON route_lines ( id_line ); </code> ===== -. Słowniki danych ===== **stops** * id - klucz podstawowym, liczba z zakresu integer, unikalna, samoczynnie zwiększająca się * name - nazwa przystanku, wartość tekstowa o długości do 40 znaków, unikalna **small_stops** * id - klucz podstawowy, liczba z zakresu integer, unikalna, samoczynnie zwiększająca się * id_stop - klucz wskazujący na wiersz w tabeli stop, liczba z zakresu integer * add_information - dodatkowe informacje o przystanku, wartość tekstowa o długości do 40 znaków **lines** * id - klucz podstawowy, liczba z zakresu integer, unikalna, samoczynnie zwiększająca się * id_line - klucz wskazujący na wiersz w tabeli line, liczba z zakresu integer, wartość niepusta * start_stop - klucz wskazujący na przystanek początkowy linii, liczba z zakresu integer * toward - kierunek w którym poruszają się pojazdy * end_stop - klucz wskazujący na przystanek końcowy linii, liczba z zakresu integer **stop_lines** * id - klucz podstawowy, liczba z zakresu integer, unikalna, samoczynnie zwiększająca się * stop_id - identyfikator przystanku, klucz wskazujący na wiersz w tabeli small_stop, liczba z zakresu integer * id_line - identyfikator linii, klucz wskazujący na wiersz w tabeli line, liczba z zakresu integer * next - identyfikator kolejnego przystanku, klucz wskazujący na wiersz w tabeli small_stop, liczba z zakresu integer **ways** * id_way - klucz podstawowy, liczba z zakresu integer, wartość unikalna, niepusta, samoczynnie zwiększająca się **route_lines** * id - klucz podstawowy, liczba z zakresu integer, unikalna, samoczynnie zwiększająca się * id_line - identyfikator linii, klucz wskazujący na wiersz w tabeli line, liczba z zakresu integer * id_way - identyfikator kolejnego odcinka trasy, klucz wskazujący na wiersz w tabeli way, liczba z zakresu integer * next - identyfikator kolejnego przystanku, klucz wskazujący na wiersz w tabeli way, liczba z zakresu integer ===== -. Analiza zależności funkcyjnych i normalizacja tabel ===== Stworzony przez nas schemat bazy danych spełnia warunki postaci normalnej (1NF, 2NF, 3NF). Dane są atomiczne i nie występuje redundancja. Używamy tylko kluczy jednoargumentowych. ===== -. Projektowanie operacji na danych ===== === Stops === Dodawanie przystanku: <code> "INSERT INTO stops (name) VALUES ('".$name."')"</code> Usunięcie przystanku: <code> "DELETE FROM stops WHERE id=$ID"</code> Uaktualnie rekordu: <code> "UPDATE stops SET name='".$new_name."' WHERE id=$id"</code> === Small_Stops === Pobranie współrzędnych punktów: <code>"SELECT ST_AsText(coordinate) AS coordinate FROM small_stops WHERE id=$id"</code> Dodanie nowego przystanku: <code>"INSERT INTO small_stops (id_stop,add_information, coordinate) VALUES ($id,'".$add_information."',ST_GeomFromText('".$point."'))"</code> Uaktualnie rekordu: <code> "UPDATE small_stops SET add_information='".$add_information_update."',id_stop=$id_stop_update, coordinate=ST_GeomFromText('".$new_coordinate."', -1) WHERE id=$id"</code> Wyszukiwanie przystanków w obrębie danego punktu: <code>SELECT * FROM small_stops WHERE ST_DWithin(coordinate, 'POINT(1000 1000)', 100.0); </code> === Ways === Dodanie nowej drogi: <code>"INSERT INTO way (id_way,line) VALUES($id_way, ST_GeomFromText('LINESTRING $this->to_add ',-1))"</code> Uaktualnie rekordu: <code> "UPDATE way SET line= ST_GeomFromText('LINESTRING $this->to_add',-1) WHERE id_way=$id_way"</code>
pl/dydaktyka/sbd/2009/projekty/mpk-gis/projekt_logiczny.1263941972.txt.gz
· ostatnio zmienione: 2019/06/27 15:55 (edycja zewnętrzna)
Pokaż stronę
Poprzednie wersje
Menadżer multimediów
Do góry