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

  • 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

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"
pl/dydaktyka/sbd/2009/projekty/mpk-gis/projekt_logiczny.txt · ostatnio zmienione: 2019/06/27 15:50 (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