2010-02-06 15 views
6

Przeszedłem przez ten temat i okazało się, że ten link jest całkiem użyteczny i prosty w tym samym czasie. Storing matrices in a relational database Ale można proszę dać mi znać, jeśli sposób wymienić jakoMatryce i bazy danych

A B C D 
E F G H 
I J K L 

[A B C D E F G H I J K L] 

jest najlepszy i prosty lub nawet niezawodny sposób przechowywania elementów macierzy w bazie danych. Ponadto muszę pomnożyć dwie macierze i uczynić operację dynamiczną. Czy przechowywanie danych spowoduje jakiekolwiek problemy z zadaniem?

Odpowiedz

0

to najlepszy i prosty lub niezawodny sposób przechowywania elementów macierzy w bazie danych. Ponadto muszę pomnożyć dwie macierze i uczynić operację dynamiczną. Czy przechowywanie danych spowoduje jakiekolwiek problemy z zadaniem?

Zacznę od stwierdzenia, że ​​oba podejścia są prawidłowe, ale drugi nie jest wystarczający, ponieważ został napisany przez Ciebie. Musisz mieć inne informacje, takie jak długość wierszy lub indeksy (wiersz, kol) każdego elementu, aby przechowywać macierz jako tablicę 1D. Zwykle robi się to dla rzadkich matricies, gdzie istnieje wiele zer otaczających wartości skupionych po obu stronach przekątnej.

Trwałość macierzy w bazie danych i operowanie nią w pamięci to dwie osobne rzeczy.

Zadania takie jak pomnożenie wymagają indeksów (wierszy, kol). Przechowywanie macierzy jako macierzy 2D oznacza, że ​​będziesz je mieć, więc żadne inne informacje nie są potrzebne. Tablica 1D również potrzebuje tych informacji, więc będziesz musiał je dostarczyć.

Zalety huśtawki do tablicy 1D dla rzadkich matricies. W takim przypadku nie musisz przechowywać wartości zerowych poza pasmem, ale twoje operacje, takie jak dodawanie i mnożenie, stają się bardziej skomplikowane dla kodu.

0

Myślę, że to zależy od tego, jak chcesz używać macierzy w swojej aplikacji.

Czy DB jest tylko dla trwałości dla tej samej aplikacji, prędkość jest ważna, a rozmiary nie mogą być znane z góry? Stwórz własny schemat serializacji i zapisz binarną kropelkę.

Czy baza danych do dzielenia między aplikacjami, o rozmiarze nie znanym z góry? Użyj listy rozdzielanej przecinkami.

Czy interesuje Cię integralność danych, bezpieczeństwo typu i czy chcesz zapytać o pojedyncze komórki? Następnie użyj schematu (wiersz, kol., Wartość komórki).

Czy wiesz, że twoje macierze mają stały rozmiar i są stosunkowo małe, na przykład macierze transformacji 4X4 i będą miały relację 1 do 1 z jakimkolwiek elementem w DB? Wtedy możesz mieć 16 rzędów w swoim stole, rozłożonych w linii.

Pomyśl o swoich przypadkach użycia i eksperymentuj!

1

W postgresql można w rzeczywistości tworzyć wielowymiarowe tablice, definiować własne typy i definiować własne funkcje na tych typach. Na przykład można po prostu zrobić:

CREATE TABLE tictactoe (
    squares integer[3][3] 
); 

Zobacz The PostgreSQL manual do informacji o tym, jak tworzyć własne typy.