Adam Bielak

Adam Bielak Student, Uniwersytet
Warszawski

Temat: Import tabeli excel ze strukturą drzewa do relacyjnej...

Witajcie,

Chcę zaimportować do relacyjnej struktury w bazie Postgresql tabelę excela zawierającej dane o systematyce zwierząt (czyli strukturę drzewiastą).
Tabela ma kolumny:
królestwo | typ | gromada | rząd | rodzina | rodzaj | gatunek
Nazwy w wyższych poziomach hierarchii powtarzają się.

Znalazłem, że najprostszą znormalizowaną strukturą, reprezentującą drzewo, mogą być 3 kolumny w 1 tabeli:
id | nazwa | parent_id

Niestety nie mam pomysłu jak przerobić dane z tabeli nieznormalizowanej do formy znormalizowanej.
Czy łatwiej jest tworzyć jakieś makro VBA, czy najpierw zaimportować do bazy i tam przerabiać?
Jak, z grubsza, może wyglądać algorytm takiego przetworzenia?

Z góry dziękuję za pomoc.
Paweł B.

Paweł B. architekt baz danych
/ SQL Developer /BI
Developer

Temat: Import tabeli excel ze strukturą drzewa do relacyjnej...

Akurat w tym konkretnie wypadku to nie jest optymalna struktura. Owszem najprostsza i najbardziej elastyczna.
Ale jeśli chcesz do takiej to proponuję(bez makra, minuta klikania):
Najpierw wytnij/wklej unikalne wartości by otrzymać coś takiego:
(null) | zwierzeta
(null) | rośliny
królestwo | typ []
typ | gromada []
gromada | rząd []
rząd | rodzina []
rodzina | rodzaj[]
rodzaj | gatunek[]

następnie zaimportuj do tabeli o strukturze
id (SERIAL),
parent_name,
name ,
parent_id = null

zrób update pola parent_id
jak się wszystko zgadza usuń pole parent_name
Paweł B.

Paweł B. architekt baz danych
/ SQL Developer /BI
Developer

Temat: Import tabeli excel ze strukturą drzewa do relacyjnej...

Wersja z makrem:
W PGSQL zbuduj funkcję (name, parentname) dodającą do struktury jak w poprzednim poście.
Dodaj rośliny i zwierzęta insertem z łapki
w VBA:
dla każdej komórki w kolumnach typ..gatunek{
wywołaj funkcję z wartością komórki, wartością z lewej
// lub wypisz do płaskiego pliku i uruchom jako skrypt
}
Adam Bielak

Adam Bielak Student, Uniwersytet
Warszawski

Temat: Import tabeli excel ze strukturą drzewa do relacyjnej...

Paweł B.:
Akurat w tym konkretnie wypadku to nie jest optymalna struktura.

Taką strukturę wybrałem, bo import do takowej wydawał się najprostszy:)
Wcześniej myślałem o strukturze zaproponowanej przez Depesza, ale jak pomyślałem o imporcie to ją skreśliłem.
Jak według Ciebie struktura byłaby odpowiedniejsza?

A za pomysł importu bardzo dziękuję:)
Myślę, że łatwiej będzie mi jednak zaimportować najpierw całą tabelę do bazy, następnie zrobić SELECT DISTINT dla każdej pary i dalej jak zaproponowałeś.

konto usunięte

Temat: Import tabeli excel ze strukturą drzewa do relacyjnej...

Dla SQL-a najlepsza jest struktura drzewa typu "każdy z każdym":

Drzewo:
id
child_id
parent_id

Nazwy:
id
nazwa

gdzie parent_id wypełniany jest dla wszystkich poziomów powyżej węzła dziecka.

Przyklad:

Nazwy:

id, nazwa
------------
0, null -- abstrakcyjny węzeł "nic"
1, królestwo
2, typ
3, gromada

Drzewo:

id, child_id, parent_id
------------------------
1, 3, 2
2, 3, 1
3, 2, 1
4, 1, 0

Wybranie wszystkich organizmow pod węzłem "krolestwo":

select * from drzewo where parent_id = 1


Wybranie wszystkich rodzicow węzła "gromada":

select * from drzewo where child_id = 3


Wskazana struktura, opisana przez Depesza jest chyba najlepsza jaką widziałem.

Następna dyskusja:

SQL Server 2014 import bazy...




Wyślij zaproszenie do