Projekt logiczny
1. Projekt tabel, kluczy, kluczy obcych, powiązań między tabelami, indeksów w oparciu o zdefiniowany diagram ERD
Diagram ERD
Projekt bazy danych w języku 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 );
2. Słowniki danych
stops
samoczynnie zwiększająca się
small_stops
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
samoczynnie zwiększająca się
integer, wartość niepusta
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
samoczynnie zwiększająca się
tabeli small_stop, liczba z zakresu integer
line, liczba z zakresu integer
wiersz w tabeli small_stop, liczba z zakresu integer
ways
unikalna, niepusta, samoczynnie zwiększająca się
route_lines
samoczynnie zwiększająca się
line, liczba z zakresu integer
wiersz w tabeli way, liczba z zakresu integer
wiersz w tabeli way, liczba z zakresu integer
3. 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.
4. Projektowanie operacji na danych
Stops
Dodawanie przystanku:
"INSERT INTO stops (name) VALUES ('".$name."')"
Usunięcie przystanku:
"DELETE FROM stops WHERE id=$ID"
Uaktualnie rekordu:
"UPDATE stops SET name='".$new_name."' WHERE id=$id"
Small_Stops
Pobranie współrzędnych punktów:
"SELECT ST_AsText(coordinate) AS coordinate FROM small_stops WHERE id=$id"
Dodanie nowego przystanku:
"INSERT INTO small_stops (id_stop,add_information, coordinate) VALUES ($id,'".$add_information."',ST_GeomFromText('".$point."'))"
Uaktualnie rekordu:
"UPDATE small_stops SET add_information='".$add_information_update."',id_stop=$id_stop_update, coordinate=ST_GeomFromText('".$new_coordinate."', -1) WHERE id=$id"
Wyszukiwanie przystanków w obrębie danego punktu:
SELECT * FROM small_stops WHERE ST_DWithin(coordinate, 'POINT(1000 1000)', 100.0);
Ways
Dodanie nowej drogi:
"INSERT INTO way (id_way,line) VALUES($id_way, ST_GeomFromText('LINESTRING $this->to_add ',-1))"
Uaktualnie rekordu:
"UPDATE way SET line= ST_GeomFromText('LINESTRING $this->to_add',-1) WHERE id_way=$id_way"