Wpis z mikrobloga

#bazydanych #sql no i może ktoś poratuje z #programowanie

Mam dwie identyczne bazy danych, ale z innymi danymi (sieć wodna i sieć komunikacyjna, jak na załączonym printscreenie).

Moja zagwostka polega na przeniesieniu danych z jednej do drugiej, ale żeby nie było za łatwo to tabele kolumny Tiles i TilesData są ze sobą powiązane kluczami na id (w obydwu przypadkach numerowanymi od 1, więc trzeba przenieść, żeby nie było żadnego konfliktu).

Mirki, od czego zacząć? Czy będzie to pardzo skomplikowane i czy sam SQL wystarczy?
szwendacz - #bazydanych #sql no i może ktoś poratuje z #programowanie

Mam dwie ide...

źródło: comment_6SFuRZhx5PwW2IEg4LrmNeFpOzH1D4YH.jpg

Pobierz
  • 26
@ludzik: hmm dzięki, każda pomoc się przyda może zrobię to jakoś, mam trochę czasu.

W jednej i drugiej bazie są te id 'autoinkrementowane' od 1 i wyzwalacze pilnują. Może jakoś poprzez utworzenie trzeciej bazy to przejść hm.
@enkapsulacja: @eovenn:

Najchętniej zrobiłbym coś takiego:

INSERT INTO Data.Tiles(X,Y,Zoom,Type,CacheTime) SELECT X,Y,Zoom,Type,CacheTime FROM SiecKomunkacyjna.Tiles;
INSERT INTO Data.TilesData(Tile) SELECT Tile FROM SiecKomunkacyjna.TilesData;

Ale niestety wyzwalacze rzucają się o konflikty kluczy (na id)
@szwendacz: Możesz do sekwencji dodać wartość maksymalnego id z tabeli z której przenosisz i wtedy nie będzie konfliktów. Tylko lepiej zrób to przed insertami, wtedy nie będzie to przeszkadzało w działaniu innych aplikacji na tych samych tabelach.
@szwendacz: Czy masz tam możliwość odpalania kursorów albo jakiegoś ekwiwalentu lecącego po wszystkich wierszach jednej tabelki? Bo sam bym zrobił tak (można też zrobić to kodem jakiegoś skryptu):
Dla każdego wiersza tabeli z kluczem głównym bazy źródłowej:
- wstaw wiersz do tabeli z kluczem głównym bazy docelowej,
- pobierz id nowo dodanego wiersza,
- wstaw wiersz do tabeli z kluczem obcym bazy docelowej podając w kolumnie klucza obcego id nowego wiersza
@szwendacz: No tak. Jak dla mnie właśnie najlepiej byłoby umieszczać wiersz po wierszu w tabeli z kluczem głównym i pobierać jego nową wartość do wstawienia do tabeli z kluczem obcym- masz wtedy spójność. Wydajnościowo to będzie słabe, ale wydaje mi się że będzie ok.