Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:sbd:2009:projekty:mpk-gis:projekt_logiczny [2010/01/19 21:11] sbd09 |
pl:dydaktyka:sbd:2009:projekty:mpk-gis:projekt_logiczny [2019/06/27 15:50] (aktualna) |
{{:pl:dydaktyka:sbd:2009:projekty:mpk-gis:bazy_mpk_gis.jpeg|}} | {{:pl:dydaktyka:sbd:2009:projekty:mpk-gis:bazy_mpk_gis.jpeg|}} |
| |
''CREATE TABLE stop ( id serial , name varchar(40) UNIQUE,PRIMARY KEY (id) ); | Projekt bazy danych w języku SQL: |
CREATE TABLE small_stop (id serial, id_stop integer REFERENCES stop (id), add_information varchar (40), PRIMARY KEY (id)); | |
SELECT AddGeometryColumn('', 'small_stop', 'coordinate', -1, 'POINT', 2); | <code sql> |
CREATE TABLE line (id SERIAL, id_line INTEGER NOT NULL, start_stop Integer REFERENCES small_stop (id), end_stop Integer REFERENCES small_stop (id), PRIMARY KEY (id)); | CREATE TABLE Stops ( id SERIAL , name varchar(40) UNIQUE NOT NULL, time smallint DEFAULT 0 ,PRIMARY KEY (id) ); |
CREATE TABLE stop_line (id serial, stop_id Integer REFERENCES small_stop (id), id_line Integer REFERENCES line (id_line), next Integer REFERENCES small_stop (id), toward BIT(1)); | CREATE TABLE Small_Stops (id SERIAL, id_stop smallint REFERENCES stops (id), add_information varchar (40), PRIMARY KEY (id)); |
CREATE TABLE way (id_way INTEGER NOT NULL UNIQUE, PRIMARY KEY (id_way) ); | 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); | SELECT AddGeometryColumn('', 'way','line',-1,'LINESTRING',2); |
CREATE TABLE route_line (id SERIAL, id_line Integer REFERENCES line (id), id_way Integer REFERENCES way (id), toward BIT(1), next Integer REFERENCES way (id), PRIMARY KEY (id));'' | 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 ===== | ===== -. 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 ===== | ===== -. 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 ===== | ===== -. 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> |
| |