[SQL] Tworzenie bazy obsługującej kolej


(niesuszek) #1

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?


(StawikPiast) #2

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.


(niesuszek) #3

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;

(boykott) #4

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/


(niesuszek) #5

Zrobiłem nowy diagram. Proszę o opinie.

 

http://screenshooter.net/0868187/amvclfx