Zdaję sobie sprawę z kilku ogólnych dobrych praktyk przy projektowaniu bazy danych aplikacji, ale co z przeprojektowaniem?
Jestem w zespole, którego zadaniem jest przeprojektowanie wewnętrznej aplikacji biznesowej, chociaż pomimo tego, że mówię „wewnętrzny”, niestety jestem wielu, wielu warstwami ludzi poza kontaktem z rzeczywistymi użytkownikami systemu.
Obecny program znajduje się w formularzach Oracle Forms, rozproszonych po wielu nienormalizowanych tabelach, czasem z wieloma niemal zduplikowanymi tabelami zawierającymi niewielkie warianty danych innych użytkowników. Ograniczenia często mają postać źle egzekwowanych procedur przechowywanych. Nawet typy nie wydają się być przechowywane poprawnie. Napotkałem wszelkiego rodzaju złe dane, które Oracle wydaje się ignorować, ale dało się je dopasować (i słusznie) do Kreatora importu / eksportu programu SQL Server. (Na przykład dwucyfrowe liczby całkowite nie stanowią pełnej daty i godziny!)
Pierwotny program prawdopodobnie cofnął się o dwadzieścia lat, a wszyscy pierwotni programiści przeszli na emeryturę tak dawno temu, że nawet starsi ludzie nie mają pojęcia, kim byli. W rezultacie nie ma też żadnych czystych wymagań do spełnienia - mamy po prostu powielić funkcjonalność istniejącej aplikacji i zachować istniejące dane.
Końcowym rezultatem przepisywania będzie wersja internetowa działająca na ASP.NET z MS SQL Server dla zaplecza.
Moi pozostali dwaj koledzy z zespołu programistów są o wiele, dużo starsi ode mnie, oboje mają doświadczenie biznesowe / MIS, podczas gdy ja mam CS. Doświadczenie starszego członka dotyczyło prawie wyłącznie formularzy Oracle, a drugi członek wykonywał głównie aplikacje biznesowe w języku Visual Basic. Chociaż moje zaplecze baz danych ogranicza się do projektowania nowych baz danych dla projektów w MySQL lub SQLite, głównie dla moich klas licencjackich, wydaje mi się, że jestem jedyną osobą z doświadczeniem w projektowaniu baz danych.
Napisałem już mały program w języku C #, który wczytuje wszystkie istniejące dane do neutralnego formatu, gotowy do ponownego przesłania i umieszczenia w nowej bazie danych. Planuję napisać kod ładowania po zaprojektowaniu docelowej bazy danych, aby dane mogły zostać odpowiednio podzielone na nowe znormalizowane tabele, dodane w odpowiedniej kolejności, aby przestrzegać nowych ograniczeń itp. Ten sam program można następnie uruchomić ponownie później aby skopiować dane produkcyjne do rzeczywiście nowo wdrożonego zakończonego przeprojektowania. Pozostawia to faktyczne przeprojektowanie bazy danych jako najważniejszą rzecz do ustalenia.
Tak więc sedno mojego pytania: jakie są najlepsze praktyki przeprowadzania przeprojektowania z poziomu bazy danych w górę istniejącej aplikacji?