Jak zanurzyć się w brzydkiej bazie danych?

26

Jestem pewien, że wielu z was ma / miała do czynienia z brzydką bazą danych. Wiesz, ta baza danych, która w ogóle nie jest znormalizowana, ta baza danych, w której musisz wykonać duże bolesne zapytanie, aby uzyskać najbardziej trywialne dane, ta baza danych, która jest w produkcji i nie możesz jej trochę zmienić ... wiesz , "ten".

Moje pytanie brzmi: jak sobie z tym poradzisz?

  • Czy próbujesz utworzyć nową bazę danych?
  • Poddajesz się i zostawiasz w spokoju?
  • Jakiej rady możesz udzielić?
eiefai
źródło

Odpowiedzi:

29
  • Pierwszą rzeczą, którą robię, jest stworzenie schematu relacji między podmiotami (ERD). Czasami można po prostu opisać metadane za pomocą narzędzi wiersza polecenia, ale w celu zaoszczędzenia czasu istnieją narzędzia, które mogą automatycznie generować diagram.

  • Po drugie, sprawdź każdą tabelę i kolumnę i upewnij się, że poznam znaczenie tego, co zawiera.

  • Po trzecie, sprawdź każdą relację i upewnij się, że rozumiem, w jaki sposób tabele odnoszą się do siebie.

  • Po czwarte, przeczytaj wszelkie widoki lub wyzwalacze, aby zrozumieć niestandardowe operacje wymuszania integralności danych lub operacje kaskadowe.

  • Po piąte, przeczytaj wszelkie procedury składowane. Przeczytaj także uprawnienia dostępu SQL, jeśli takie istnieją.

  • Po szóste, przeczytaj części kodu aplikacji korzystające z bazy danych. W tym miejscu egzekwowane są dodatkowe reguły biznesowe i reguły integralności danych.


aktualizacja: Właśnie przeczytałem interesujący artykuł „ 9 rzeczy do zrobienia, kiedy odziedziczysz bazę danych ” z dobrą listą kontrolną.

Podsumowanie:

  1. Kopie zapasowe
  2. Badania (kroki dokumentacji schematu, o których wspomniałem powyżej)
  3. Porozmawiaj z byłymi programistami
  4. Baza danych błędów
  5. Kontrola kodu źródłowego
  6. Porozmawiaj z użytkownikami i / lub właścicielami firm
  7. Ustal wiarygodność użytkowników, naprawiając kilka rzeczy lub wprowadzając pewne ulepszenia
  8. Utwórz środowisko programistyczne
  9. Upuść przestarzałe przedmioty
Bill Karwin
źródło
13

Nie zawsze jest to możliwe, ale jedną rzeczą, która zadziałała w niektórych sytuacjach, jest zastąpienie niektórych tabel widokami. Następnie możesz uporządkować stoły pod spodem, a w niektórych przypadkach ostatecznie pozbyć się widoków. Jak powiedziałem, działa tylko w niektórych przypadkach.

Mile D.
źródło
W Oracle widok zmaterializowany może również w tym pomóc.
Leigh Riffel
9

Słownik danych jest twoim przyjacielem. Wypróbuj również inżynierię wsteczną bazy danych za pomocą narzędzia do inżynierii wstecznej w Visio i buduj swój własny zestaw diagramów. Ponieważ inżynieria odwrotna jest interaktywna - budujesz diagramy - jest o wiele bardziej angażująca niż czytanie słownika danych. Aktywność tego procesu jest jego zaletą i uważam to za dość relaksujące.

Większość pracy, którą wykonuję, polega na hurtowni danych, gdzie przeszukiwanie schematów baz danych w systemie źródłowym jest czymś podstawowym. Robiłem takie rzeczy przy wielu okazjach i stwierdziłem, że działa naprawdę dobrze.

Visio pro nie jest tak drogi, a silnik modelowania Visio pozwala udostępniać model na wielu diagramach. Jako bonus możesz dodać brakujące klucze obce na diagramach, a na końcu otrzymasz przydatny zestaw dokumentacji dla systemu.

ConcernedOfTunbridgeWells
źródło
6

Oprócz pomysłów Billa Karwina proponuję rozmawiać z użytkownikami - czasami użytkownicy wiedzą całkiem sporo o tym, do czego służy ich baza danych, szczególnie jeśli robią z niej jakiekolwiek raporty.

Kramii Przywróć Monikę
źródło
6

Mam do czynienia z bardzo brzydkim oprogramowaniem dla dostawcy, które poza sugestiami nie mogę wiele zrobić, aby to zmienić. Zawsze staram się, aby wszystko się zmieniło, ale ponieważ jest to poza moją kontrolą, utknąłem w śmieciach.

Jedną z rzeczy, z których szybko zacząłem korzystać, ponieważ baza danych nie ma absolutnie żadnych relacji, jest ogólne zapytanie o nazwę schematu:

--Find Column named like 'blah' in a specific table
SELECT O.NAME, O.ID, C.NAME, O.XTYPE
FROM SYSOBJECTS O LEFT JOIN SYSCOLUMNS C ON O.ID=C.ID
WHERE C.NAME LIKE '%SearchFor%' AND O.XTYPE IN ('U','V') AND O.Name like '%TableName%'
ORDER by O.Name

lub

--Find all Columns in DB with name like 'blah'    
SELECT O.NAME, O.ID, C.NAME, O.XTYPE
FROM SYSOBJECTS O LEFT JOIN SYSCOLUMNS C ON O.ID=C.ID
WHERE C.NAME LIKE '%SearchFor%' AND O.XTYPE IN ('U','V')
ORDER by O.Name

Ponieważ niektóre tabele mają zbyt wiele źle nazwanych kolumn i zbyt wiele kolumn, aby je przejrzeć, aby znaleźć to, czego mógłbym użyć do utworzenia relacji między tabelami.

Wiem, że to niewiele pomaga w przeprojektowaniu części pytania, ale jest bardzo pomocne w zrozumieniu i rozszyfrowaniu złego schematu.

Benjamin Anderson
źródło
6

SchemaCrawler to moje narzędzie do wyszukiwania baz danych, które ma kilka funkcji, które ułatwiają eksplorację brzydkiej bazy danych. SchemaCrawler ma funkcję podobną do „grep”, która umożliwia wyszukiwanie tabel i kolumn za pomocą wyrażeń regularnych. Na przykład możesz wyszukać tabele i kolumny zawierające „KONTO” jako część ich nazwy i prawdopodobnie będą one w jakiś sposób powiązane.

SchemaCrawler ustala również relacje kluczy obcych, nawet jeśli nie ma kluczy obcych. Odbywa się to poprzez znajdowanie „słabych skojarzeń” przy użyciu popularnych konwencji nazewnictwa, takich jak tabele, w których nazwy są zwykle liczbą mnogą, ale nazwy kolumn nie są, a nazwy kolumn mogą mieć prefiks _ID. Możesz znaleźć pokrewne tabele, korzystając z tych wywnioskowanych relacji.

Sualeh Fatehi
źródło
5

Zależy od tego, jak brzydki jest i od tego, ile masz kontroli nad projektem i co z nim współdziała. Przez lata musiałem wchodzić w interakcje z wieloma brzydkimi bazami danych w mojej obecnej pracy i oto jak sobie z nimi poradziłem:

Dane pracowników

Istnieje baza danych przechowująca dane pracowników. Jest to baza danych dostawców, więc nie mam nad nią kontroli. (Un?) Na szczęście nie mam bezpośredniego dostępu do tego. Dostaję zrzut DTS każdego ranka.

Najlepsze, co udało mi się poradzić, to napisanie skryptu, który będzie szorował dane wejściowe z porannego zrzutu (tak, że wybór słów był celowy) i zmigrowałem go do bardziej użytecznego formatu, i pracowałem z oczyszczonych danych.

Nawet gdybym mógł to zmienić, prawdopodobnie nie zrobiłbym tego - tylko dlatego, że istnieje wiele innych programów, które polegają na tym, że jest skonfigurowane tak, jak jest, i nie mogę wymusić zmiany w nich.

Dane szkoleniowe online

To był bałagan mojego własnego projektu. Zbudowałem go świeżo po studiach bez mentora, który by mi pomógł ... Od tego czasu trochę go naprawiam. Ponieważ kontroluję jedyny program, który uzyskuje dostęp do danych, uaktualniając części witryny, „aktualizuję” konfigurację bazy danych. Napiszę skrypt transformacji i przetestuję go energicznie na kopii, aby zapewnić, że wszystkie zmiany, które należy wprowadzić, zostaną wprowadzone.

To był długi proces, ale ładnie się rozwija.

Dane szkoleniowe w klasie

Mój projekt pilotażowy integrował dane z 3 różnych baz danych, wszystkie zaprojektowane nieco inaczej przez mojego poprzednika ... który był wychowawcą pielęgniarki, który wziął lekcje programowania lub dwie.

To był kolejny powolny proces. Ponieważ mam pełną kontrolę nad programami, które uzyskują dostęp do danych, zmieniłem je krok po kroku, podobnie jak dane szkoleniowe online.

Patrząc wstecz, byłby to najlepszy kandydat do rozpoczęcia czystego ... widok z tyłu zawsze wynosi 20/20.

Na końcu...

Nie wiem, jak to pomogło, i mogę rozwinąć więcej (do pewnego stopnia, legalna firma yada yada i wszystko inne). Ostateczna odpowiedź to „To zależy”.

AnonJr
źródło
5

Więc po przeczytaniu wszystkich twoich odpowiedzi, daję ci moje:

Najpierw szukam „Tabeli wzorcowej”, a następnie, za pomocą pióra i papieru, zaczynam mapować relacje z innymi tabelami, a następnie, jeśli jest jakiś kod aplikacji, na który mogę patrzeć, zaczynam robić surowe szkice dotyczące przepływu danych.

Po uzyskaniu ładnego obrazu na temat działania bazy danych zaczynam sprawdzać miejsca, w których można coś zmienić. to jest to!

Nie wiem dlaczego, ale wolę papier niż jakiekolwiek oprogramowanie do modelowania baz danych.

eiefai
źródło
5

Ze względu na używanie go przez aplikację zewnętrzną nie można zmienić „interfejsu” bazy danych. Nie wiem, jakiego typu bazy danych używasz (oracle, mysql, mssql), ale widzę to jako jeden ze sposobów:

  • budowanie interfejsu bazy danych przy użyciu typów obiektów jako widok i procedur przechowywanych.
  • refaktoryzacja krok po kroku (normalizacja, zmiana nazwy pola ...)
  • zmiana aplikacji klienta (jeśli jest wymagana)

Widoki, procedury przechowywane ukryją modyfikacje (zmiany) wewnętrznych baz danych.

garik
źródło
4

Poza odkryciem struktury bazy danych odkryłem, że ważne jest również przyjrzenie się jakości danych . Po zrozumieniu znaczenia każdej kolumny możesz poszukać miejsc, w których brakuje wielu wartości. Po zapoznaniu się z danymi możesz również sprawdzić, gdzie występują niespójności między wartościami w różnych kolumnach.

Eric Ness
źródło
4

To zależy od sposobu interakcji. W przypadku scenariuszy użytkowania, w których wsadowe jest akceptowalne, dość często uważałem, że najbardziej opłacalne (pod względem czasu programowania, a tym samym kosztów dla klienta) jest wysyłanie danych do bardziej przyjaznej struktury i działanie przeciw temu.

Russell Steen
źródło
4

Jeśli możesz podzielić problem na problemy, które możesz otoczyć mózgiem, możesz atakować je pojedynczo. Czasami sama wiedza o tym, że jest jeden stół, który nie jest tak naprawiony, może dać ci przyczółek do pracy. W ten sposób rozszerzasz swój „czysty punkt”, aby objąć większą część bazy danych w porcjach.

D. Lambert
źródło
4

Jeśli masz Visio (część pakietu Microsoft Office), możesz wypróbować funkcję inżynierii wstecznej . To nie jest ładne, ale przynajmniej da ci początek (za ułamek ceny „prawdziwych” narzędzi, takich jak Rational Rose).

Gajusz
źródło
3

Schema Spy to naprawdę miłe narzędzie do generowania ERD.

Dónal
źródło
3

Bill udzielił doskonałej odpowiedzi. Dodałbym, że zaloguję się do interfejsu użytkownika jako użytkownik testowy i spróbuję zrozumieć dokładnie, co użytkownicy robią z danymi. Pomoże ci zrozumieć, dlaczego niektóre z przechowywanych procesów lub projektu. Zrozumienie, co dane oznaczają i są wykorzystywane, ma kluczowe znaczenie dla zrozumienia bazy danych.

Jeśli baza danych dotyczy funkcji biznesowej lub przedmiotu, którego na ogół nie znasz (powiedzmy, że zajmuje się planowaniem lotów, a wcześniej pracowałeś tylko nad aplikacjami finansowymi), poproś użytkowników o lekturę materiałów na ten temat lub przejdź do biblioteki sam lub przeszukaj Internet na dany temat. Zapytaj użytkowników, czy istnieją problemy prawne lub regulacyjne, o których musisz wiedzieć. Ponownie niektóre z tych tematów mogą wyjaśnić, co wydaje się dziwnymi wyborami projektowymi.

HLGEM
źródło
3

Jeśli jest to baza danych dostawcy (a widziałem kilka naprawdę złych), wszystko, co możesz zrobić, to złożyć skargę do dostawcy.

W przypadku aplikacji, które są wbudowane w domu, zwykle wymaga to trochę edukacji dla programistów i można zacząć zmieniać schemat, aby poprawić wydajność. To zajmuje dużo czasu i zwykle jest to powolny proces.

Z mojego doświadczenia wynika, że ​​tworzenie nowej bazy danych nie jest tak naprawdę opcją, ponieważ przenoszenie setek GB lub TB danych nie jest wcale tak wykonalne.

Pozostawienie go w spokoju również zwykle nie jest opcją. Gdy ilość danych w bazie danych rośnie, wydajność będzie się pogarszać (przyznane przez czas, kiedy widzę problemy, zwykle są cholernie złe). W końcu użytkownicy nie będą mogli korzystać z aplikacji, ponieważ wydajność jest tak niska.

mrdenny
źródło
3

Ach ... brzydka baza danych, im większe przedsiębiorstwo, tym więcej starszych baz danych znajdziemy.

  • Dostrajając wydajność ludzie nie narzekają na takie bazy danych, dopóki nie znajdą problemów z wydajnością. Dlatego w naszej organizacji identyfikujemy poszczególne zapytania i dostosowujemy je jako łatkę.
  • Ograniczając dane, teraz wiemy, gdzie śmierdzące śmieci, więc staraj się unikać przepływu danych przez takie bazy danych. Utwórz tymczasowe bazy danych i przekieruj dane do tych tabel, aby zacząć od nich, i użyj starych jako zrzutów danych.
  • Unikaj gromadzenia danych Archiwizuj / obcinaj stare dane, które nie są już wymagane. Powinien istnieć zespół, który decyduje o tym, jak długo dane są wymagane w bazie danych. Następnie możesz przenieść go do płaskich plików, a nawet na napędy taśmowe.
  • Wycofaj go, gdy będziesz w stanie osiągnąć przekierowanie i obcięcie danych. Przekonaj pozostałe zespoły, aby zaczęły korzystać z nowej bazy danych.

Nie zawsze działa, ale jeśli nie włożymy wysiłku, będzie tylko gorzej. Próbuję przeprojektować bazy danych wraz z aplikacjami, może to dla mnie zwiększyć pracę z migracją danych, ale wydajność to magiczna sztuczka, którą zawsze wyciągam z głowy.

Powodzenia z brzydką koleżanką;)

darwindeeds
źródło
2

Sprawdź, czy dostępna jest opcja sesji Transferu wiedzy, a jeśli tak, to w pełni ją wykorzystaj.

Ponadto wiele DBMS-ów jest wyposażonych w narzędzia umożliwiające rysowanie / drukowanie schematu bazy danych z przydatnymi informacjami (np. Kluczami obcymi).

Dodatkowo (skradzione z NXC) możesz dokonać inżynierii wstecznej bazy danych za pomocą narzędzi takich jak Visio.


źródło
2

Lubię odpalać profiler zapytań i obserwować, co dzieje się w systemie produkcyjnym. Daje mi pojęcie o tym, które tabele są „gorące” i jakie są zapytania skierowane przeciwko nim.


źródło
1

Umieść kopię zapasową na serwerze piaskownicy, a następnie zacznij pisać i uruchamiać zapytania testowe. Zawsze uważam, że skomplikowany system jest łatwiejszy do zrozumienia, jeśli mogę go zdobyć i nie martwić się o jego uszkodzenie.

Lubię też mieć Daily WTF otwarty w oknie przeglądarki. Przejęcie czyjegoś projektu zwykle wiąże się z wieloma momentami „Nie mogę uwierzyć, że zrobili to {WTF}”, i pomaga znaleźć miejsce, w którym ludzie rozumieją twój ból.


źródło