Tomasz G.

Tomasz G. programista,
konstruktor
elektronik

Temat: Trzymanie danych w dwóch schematach

Witam

Planuję rozbić dane przetrzymywane w bazie na dwa schematy (schema w MySql). Konkretnie coś takiego:
dane_osobowe - dane o klientach, pracownikach (osoba, miasto, ulica, stanowisko, itp...)
zamowienia - informacje o zamówieniach, produktach (produkt, towar, grupa_towarow, lista_towarow_zamowionych, itp...)

Jedna lub dwie tabele z zamówień będą się odnosić do tabel danych osobowych.

z mojego punktu widzenia - czysto porządkowa operacja, takie grupowanie tabel, jednak nasuwają mi się poniższe pytania:

Jak taka operacja wpłynie na szybkość działania bazy, o ile w ogóle?

Jakie skutki niesie za sobą poza trzymaniem danych w osobnych podkatalogach na dysku?

Przy logowaniu w aplikacji podaje się nazwę bazy, czy takie rozbicie bardzo utrudni mi wydobywanie danych? Zawsze mogę zamiast jednego zapytania z łączeniem wykonać dwa osobne po jednym na każdej bazie? Domyślam się że będę musiał nadać odpowiednie uprawnienia żeby z jednego schematu dostać się do drugiego.

Dzięki za pomoc.

--edit:
Baza to MySQLTomasz G. edytował(a) ten post dnia 12.12.09 o godzinie 12:48

konto usunięte

Temat: Trzymanie danych w dwóch schematach

Jeżeli zrobisz to w obrębie jednej instancji to na standardowych ustawieniach będziesz widział dwie bazy i będziesz w stanie je odpytywać na poziomie 1 zapytania SQL.. ( select * from baza1.foo inner join baza2.foo2 on (foo_id) ) ale ogólnie zaniechaj takich pomysłów z powodów "porządkowych" ;) Może lepiej wprowadź prefiksy przed nazwami tabel jak tak bardzo ci to przeszkadza?

Wybierając taką drogę możesz nie zapanować nad spójnością ;) bo pozbywasz się wszystkich wbudowanych w mySQL'a mechanizmów ( więzów referencyjnych ).

Pomysł na przetwarzanie jednego zapytania i odpytywanie drugiej bazy by uzyskać dane jest wybitnie nietrafiony i czas wykonania w skrajnych przypadkach pewnie wydłuży się 10^X i nie chcesz wiedzieć ile te X wynosi ;)

R.
Tomasz G.

Tomasz G. programista,
konstruktor
elektronik

Temat: Trzymanie danych w dwóch schematach

Rafał Wardas:
Jeżeli zrobisz to w obrębie jednej instancji to na standardowych ustawieniach będziesz widział dwie bazy i będziesz w stanie je odpytywać na poziomie 1 zapytania SQL.. ( select * from baza1.foo inner join baza2.foo2 on (foo_id) )
Możliwość jest, domyślam się że jedyne co musiałbym ustawić to odpowiednie uprawnienia do odczytu obydwu schematów.
ale ogólnie zaniechaj takich pomysłów z powodów "porządkowych" ;) Może lepiej wprowadź prefiksy przed nazwami tabel jak tak bardzo ci to przeszkadza?
W sumie to wystarczy. Przyzwyczajenie z drzewa katalogów podsunęły taki pomysł.
Wybierając taką drogę możesz nie zapanować nad spójnością ;) bo pozbywasz się wszystkich wbudowanych w mySQL'a mechanizmów ( więzów referencyjnych ).
Właśnie czegoś takiego się obawiałem.
Abstrahując od sensowności lub nie mojego pomysłu, czy baza nie potrafi pilnować więzów integralności pomiędzy schematami?

Pomysł na przetwarzanie jednego zapytania i odpytywanie drugiej bazy by uzyskać dane jest wybitnie nietrafiony i czas wykonania w skrajnych przypadkach pewnie wydłuży się 10^X i nie chcesz wiedzieć ile te X wynosi ;)
To bardziej jako alternatywa by było, domyślam się że by wydłużyło czas uzyskania wyników ale nie sądziłem że będzie to więcej niż 10^1 nawet :)

R.
Dzięki

PS. Czy "Schema" ma jakieś polskie tłumaczenie bazodanowe inne niż schemat?

konto usunięte

Temat: Trzymanie danych w dwóch schematach

Tomasz G.:
[...]
z mojego punktu widzenia - czysto porządkowa operacja, takie grupowanie tabel, jednak nasuwają mi się poniższe pytania:

Jak taka operacja wpłynie na szybkość działania bazy, o ile w ogóle?
Jeżeli to jest myISAM - nie wpłynie. Przy takim podejściu i tak trzyma każdą tabelkę w osobnym pliku. Dla InnoDB - nie mam pojęcia, nie używałem.
Jakie skutki niesie za sobą poza trzymaniem danych w osobnych podkatalogach na dysku?

Przy logowaniu w aplikacji podaje się nazwę bazy, czy takie rozbicie bardzo utrudni mi wydobywanie danych? Zawsze mogę zamiast jednego zapytania z łączeniem wykonać dwa osobne po jednym na każdej bazie? Domyślam się że będę musiał nadać odpowiednie uprawnienia żeby z jednego schematu dostać się do drugiego.
Nazwy tabel poprzedza się prefiksem - wygląda to tak: nazwa_schematu.nazwa_tabeli Reszta jest po staremu - można robić zapytania do wielu tabel, w różnych schematach itp.

Acha - przy MyISAM nie ma więzów integralności. Dla InnoDB są, ale wtedy dane trzymane są w jednym pliku. Ciekawe jak mają się do tego schematy...

--
Pozdrawiam,
Michał Zaborowski



Wyślij zaproszenie do