[SQL] Tworzenie bazy obsługującej kolej

Witam. Mój problem polega na tym, że nie wiem jak utworzyć strukture tabel w bazie obsługującej kolej. Chodzi mi dokładnie o wyszukiwanie trasy, kiedy podany jest jeden przystanek przejazdowy. Jakieś wskazówki?

To chyba zależy jak chcesz to liczyć. Jaki masz algorytm liczenia owej trasy?

Będziesz wyszukiwał jakąś najkrótszą, najszybsza? Opisz dokładniej czego potrzebujesz bo póki co to za mało danych.

Generalnie myślałem o tym, żeby “z łapy” wpisywać kolejne stacje linii kolejowej i przyjąć że pomiędzy nimi jest 20km drogi. Po wpisaniu np. Ciechanów będzie wypisywać mi wszystkie stacje linii i tyle. Przyjąć trzeba dodatkowo jakiś algorytm wyliczania ceny biletu, np. do 20km - 5zł, do 50km - 10zł itd. Tylko nie wiem jak struktura ma wyglądać, zrobiłem przykładową:

--
-- Tworzenie tabeli "KOLEJ"
--
CREATE TABLE "KOLEJ" 
   (	"id_nr" NUMBER(5,0),
		"id_pociag" NUMBER(5,0), 
		"id_miejscowosc" NUMBER(6,0), 
		PRIMARY KEY ("id_nr") ENABLE,
		UNIQUE ("id_pociag") ENABLE, 
		UNIQUE ("id_miejscowosc") ENABLE
    );

-- Tworzenie sekwencji do tabeli "KOLEJ"
CREATE SEQUENCE KOLEJ_SEKWENCJA
START WITH 1
INCREMENT BY 1
nomaxvalue;  
	
--
-- Tworzenie tabeli "POCIAG"
--
CREATE TABLE "POCIAG" 
   (	"id_pociag" NUMBER(5,0),
		"sklad" VARCHAR2(20), 
		"rodzaj" VARCHAR2(20), 
		PRIMARY KEY ("id_pociag") ENABLE
    );
	
-- Tworzenie sekwencji do tabeli "POCIAG"
CREATE SEQUENCE POCIAG
START WITH 1
INCREMENT BY 1
nomaxvalue;  	
	
--
-- Tworzenie tabeli "MIEJSCOWOSC"
--
CREATE TABLE "MIEJSCOWOSC" 
   (	"id_miejscowosc" NUMBER(5,0),
		"nazwa_miejscowosci" VARCHAR2(20), 
		"linia" NUMBER(5,0), 
		"id_cena" NUMBER(5,0),
		PRIMARY KEY ("id_miejscowosc") ENABLE,
		UNIQUE ("id_cena") ENABLE
    );
	
-- Tworzenie sekwencji do tabeli "MIEJSCOWOSC"
CREATE SEQUENCE MIEJSCOWOSC_SEKWENCJA
START WITH 1
INCREMENT BY 1
nomaxvalue;  	
	
--
-- Tworzenie tabeli "CENA"
--
CREATE TABLE "CENA" 
   (	"id_cena" NUMBER(5,0),
		"cena_biletu"	NUMBER(5,0), 
		PRIMARY KEY ("id_cena") ENABLE
    );
	
-- Tworzenie sekwencji do tabeli "CENA"
CREATE SEQUENCE CENA_SEKWENCJA
START WITH 1
INCREMENT BY 1
nomaxvalue;  
	
--
-- Łączenie tabel kluczami obcymi
--
ALTER TABLE "KOLEJ" ADD CONSTRAINT "kolej--pociag" FOREIGN KEY ("id_pociag") REFERENCES "POCIAG" ("id_pociag") ENABLE;
ALTER TABLE "KOLEJ" ADD CONSTRAINT "kolej--miejscowosc" FOREIGN KEY ("id_miejscowosc") REFERENCES "MIEJSCOWOSC" ("id_miejscowosc") ENABLE;
ALTER TABLE "CENA" ADD CONSTRAINT "miejscowosc--cena" FOREIGN KEY ("id_cena") REFERENCES "CENA" ("id_cena") ENABLE;

Polecam zapoznać się z alternatywnymi sposobami zapisu danych hierarchicznych w bazie, np. MPTT (modified pre-order tree traversal): http://www.sitepoint.com/hierarchical-data-database-2/

Zrobiłem nowy diagram. Proszę o opinie.

 

http://screenshooter.net/0868187/amvclfx