Наше решение требует, чтобы мы работали в иерархиях регионов, которые выглядят следующим образом.
STATE
|
DISTRICT
|
TALUK
/ \
/ \
HOBLI PANCHAYAT
\ /
\ /
\ /
VILLAGE
Существует два способа перейти в деревню из Талука.Либо через HOBLI, либо через PANCHAYAT.
Нам нужен PK (некоммерческий ключ) и SERIAL_NUMBER / ID для каждого STATE, DISTRICT, TALUK, HOBLI, PANCHAYAT, VILLAGE;Однако каждая деревня имеет 8 дополнительных атрибутов.
Как мне спроектировать эту структуру в PostgreSQL 8.4 ?
Мой предыдущий опыт был на Oracle, поэтому мне интересно, как ориентироваться в иерархических структурах в PostgreSQL 8.4?Если вообще, решение должно быть дружественным для READ / скорости навигации.
================================================================
Quassnoi: Вот примерная иерархия
KARNATAKA
|
|
TUMKUR (District)
|
|
|
KUNIGAL (Taluk)
/ \
/ \
/ \
HULIYUR DURGA(Hobli) CHOWDANAKUPPE(Panchayat)
\ /
\ /
\ /
\ /
\ /
Voddarakempapura(Village)
Ankanahalli(Village)
Chowdanakuppe(Village)
Yedehalli(Village)
NAVIGATE: На данный момент я буду представлять 2отдельные экраны пользовательского интерфейса, каждый из которых имеет отдельные навигационные иерархии
# 1 с использованием HOBLI и, таким образом, для # 1 мне потребуется все дерево, начиная с STATE, DISTRICT (s), TALUK (s), HOBLI (s), СЕЛО (и).Используя приведенное выше дерево, мне нужно будет
KARNATAKA (State)
|
|
|---TUMKUR (District)
|
|
|-----KUNIGAL(Taluk)
|
|
**|----HULIYUR DURGA(Hobli)**
|
|
|---VODDARAKEMPAPURA(Village)
|
|---Yedehalli(Village)
|
|---Ankanahalli(Village)
# 2, используя PANCHAYAT .Итак, для # 2 мне понадобится все дерево, начиная с STATE, DISTRICT (s), TALUK (s), PANCHAYAT (s), VILLAGE (s)
KARNATAKA (state)
|
|
|---TUMKUR (District)
|
|
|-----KUNIGAL(Taluk)
|
|
**|----CHOWDANAKUPPE (Panchayat)**
|
|
|---VODDARAKEMPAPURA(Village)
|
|---Ankanahalli(Village)
|
|---Chowdanakuppe(Village)
ResultSet
Должны быть в состоянии создать выше деревья со следующими деталями.Нам нужен PK (некоммерческий KEY) и SERIAL_NUMBER / ID для каждого STATE, DISTRICT, TALUK, HOBLI, PANCHAYAT, VILLAGE вместе с именем и УРОВНЕМ отношений (аналогично ORACLE'S LEVEL ).
На данный момент получение вышеуказанного ResultSet в порядке.Но в будущем нам понадобится возможность составлять отчеты (некоторая агрегация) на уровне HOBLI / PANCHAYAT / TALUK.
=====================================
@ Quassnoi # 2 , Большое спасибо,
"Если выпланируют добавить еще несколько осей иерархии, возможно, стоит создать отдельную таблицу для хранения иерархий (с добавленным полем оси), а не добавлять поля в таблицу. "
Собственно, я упростил существующуютребование, чтобы не путать никого. фактическая иерархия выглядит следующим образом
STATE
|
DISTRICT
|
TALUK
/ \
/ \
HOBLI PANCHAYAT
\ /
\ /
\ /
REVENUE VILLAGE
|
|
HABITATION
Пример данных для такой иерархии выглядит следующим образом:
KARNATAKA
|
TUMKUR (District)
|
KUNIGAL (Taluk)
/ \
/ \
HULIYUR DURGA(Hobli) CHOWDANAKUPPE(Panchayat)
\ /
\ /
Thavarekere(Revenue Village)
/ \
Bommanahalli(habitation) Tavarekere(Habitation)
Изменится ли что-нибудь в вашем решении ниже с помощью вышеуказанной модификации?
Кроме того, вы бы порекомендовали мне создать еще одну таблицу, как показано ниже, для хранения 7 свойств среды обитания?Есть ли лучший способ хранить такую информацию?
CREATE TABLE habitatDetails
(
id BIGINT NOT NULL PRIMARY KEY,
serialNumber BIGINT NOT NULL,
habitatid BIGINT NOT NULL, -- we will add these details only for habitats
CONSTRAINT "habitatdetails_fk" FOREIGN KEY ("habitatid")
REFERENCES "public"."t_hierarchy"("id")
prop1 VARCHAR(128) ,
prop2 VARCHAR(128) ,
prop3 VARCHAR(128) ,
prop4 VARCHAR(128) ,
prop5 VARCHAR(128) ,
prop6 VARCHAR(128) ,
prop7 VARCHAR(128) ,
);
Спасибо,