2013-10-18 16 views
7

Czy można wykreślić tabele w bazie danych PostgreSQL i ich relacje za pomocą R, jak pokazano poniżej?Tabele wydruku i relacje z tabel Postgresql

enter image description here

+1

Prawdopodobnie nie. Ale sprawdź [to pytanie] (http://stackoverflow.com/questions/3223770/tools-to-generate-database-tables-diagram-with-postgresql) i [ta strona internetowa] (http: //www.pgmodeler. com.br/). – nograpes

+0

http://stackoverflow.com/questions/3223770/tools-to-generate-database-tables-diagram-with-postgresql –

+0

@Denis To jest to samo pytanie, które podłączyłem. – nograpes

Odpowiedz

6

Tak jest to możliwe.

chodzi o jak to jest możliwe, patrz poniższe kroki

Kroki

  1. Połącz się z bazą danych PostgreSQL
  2. Uzyskaj informacje o schemacie bazy
  3. Store Schema Informacja w strukturze danych/Zmień kolejność danych w ramkach danych na strukturę danych.
  4. Generowanie Diagram od struktury danych

Krok 1

Do podłączenia do bazy danych PostgreSQL z R istnieją różne mechanizmy robi więc tym

  1. RPostgreSQL (R do PostgreSQL, uporczywego połączenie)
  2. sqldf (R do PostgreSQL, tymczasowe połączenie jest częścią krok 3 automatycznie), ma zależność RPostgreSQL.
  3. PL/R (PostgreSQL R)
  4. db.r (R PostgreSQL ma podstawowe wizualizacji bazy wbudowany np częściowego etapu 2,3,4,)

Przykład Etapie 1 w RPostgreSQL poniżej:

library(RPostgreSQL) 

## loads the PostgreSQL driver 
drv <- dbDriver("PostgreSQL") 

## Open a connection 
con <- dbConnect(drv, dbname="databasename") 

Krok 2

można to zrobić na kilka sposobów. Można to zrobić bezpośrednio w SQL lub można to zrobić za pomocą dbListTables i dbListFields programu RPostgreSQL lub ich kombinacji za pomocą obiektów DBListTables i dbListFields RP2.

Na przykład SQL kwerendy wszystkich tabel w bazie danych, czy wszystkie pola/kolumny w tabeli lub wszystkie ograniczenia w tabeli widoczne są następujące StackOverflow odpowiedzi

Podsumowując wystarczy zapytać information_schema.tables, information_schema.columns i information_schema.table_constraints dla potrzebnych informacji. Możesz użyć tabel specyficznych dla PostgreSQL zamiast tabel standardowych ANSI SQL, jeśli prędkość jest problemem (są one wymienione w połączonych odpowiedziach powyżej), ale mogą się zmieniać z czasem.

Kroki oto

  1. Uzyskaj listę tabel
  2. iterację listy tabel i uzyskać kolumn na stole (na przemian po prostu zbadać wszystkie kolumny z kwerendy, która zawiera nazwę tabeli i kolumny nazwisko w wyniku set)
  3. iterację listy tabel i inne ograniczenia na stole na przemian tylko zapytania wszystkie kolumny z kwerendy, która zawiera nazwę tabeli i wiązania nazwy w tabeli wynikowej)

Przykład kroku 2 w RPostgreSQL znajduje się poniżej:

Dostosuj ustawienia SQL do potrzeb.

Part1

dla uzyskania listy tabel

za pomocą wbudowanego w funkcji

tables1 <- dbListTables(con) 

pomocą SQL

tables2 <- dbGetQuery(con, "select table_name from information_schema.tables") 

Część 2

Zastosowanie wbudowaną funkcję

byłoby użyć dbListFields (con "TableName"), z zastosowania w stosunku do poprzedniej ramki danych z tabel. Zobacz how to apply a function to every row of a matrix (or a data frame) in R lub Apply a function to each row in a data frame in R i zapisz wynik do zmiennej.

Stosując SQL

columns2 <- dbGetQuery(con, "select table_name,column_name from information_schema.columns") 

część 3

Stosując SQL

constraints <- dbGetQuery(con, "select table_name,constraint_name, constraint_type from information_schema.table_constraints") 

Etap 3

Od kroku 2 powinieneś mieć listę tabel, listę tabel i powiązanych z nimi pól/kolumn oraz listę tabel i związanych z nimi ograniczeń.

Musisz albo wypisać plik csv do wykorzystania w CityPlot, albo plik punktowy dla GraphViz, albo format wykresu igraph lub ramkę danych albo hash, aby przetwarzać za pomocą funkcji, które rysują twoje tabele i połączenia między nimi za pomocą siatki lub diagram.

Jeśli połączysz je w jedną ramkę danych, przydatne będą podzbiory i scalenia.

Krok 4

Ten krok można zrobić na wiele różnych sposobów. Należą do nich, ale nie są ograniczone do

  1. grid-package (Patrz pdf w odnośnikach na przykład artykuł, który odpowiada wybranym sprawę użytku), prymitywów Low Level Graphics
  2. diagram package i shape package (Patrz pdf w odnośnikach na przykład użytkowania) Nieznacznie wyższe elementów graficznych takich poziom
  3. Rgraphviz package (Graphviz zasadniczo albo etap generowania plików punkt 3 lub zobacz pdf w aby uzyskać więcej informacji)
  4. igraph package (wygeneruje tylko koła spłaszczone dla każdej kolumny i tabeli combinat ion)
  5. CityPlot package (Generuje diagram Entity Relationship w przeciwieństwie do schematu tabeli bazy danych, ale może zaspokoić swoje potrzeby, musi krok 3, aby wygenerować plik CSV z ramek danych)

przypadku korzystania z diagramu, kształt lub pakiety grid, możesz iterować na liście tabel, haszy lub innej struktury danych i zastosować funkcję rysowania dla każdej tabeli, a następnie mieć oddzielną funkcję, która jest stosowana dla każdego ograniczenia, aby narysować linie.

Odniesienia

+0

Dziękujemy za szczegółowy przykład. Szukałem rozwiązania oszczędzającego czas. Na razie używam programu schematowego, który również wykorzystuje grafviz. Ma obsługę skryptów dla JavaScript, Groovy, Ruby lub Python, ale nie dla R. Jednak wciąż można używać z R przy użyciu wywołań linii poleceń. – jangorecki

+0

Schemaspy jest rozwiązaniem oszczędzającym czas i jak wspomniano we wcześniejszych komentarzach. Najbliżej rozwiniętą rzeczą do tej pory jest db.r, ale jest ona przeznaczona do eksploracji schematu danych, a nie do eksportu masowego i CityPlot, ale wciąż potrzebuje pliku csv jako źródła danych w celu wygenerowania diagramów. – Appleman1234

Powiązane problemy