/ / Dwa podobne programy korzystające ze wspólnej bazy danych - jak to zrobić najlepiej? - sql-server, baza danych, delphi, wersjonowanie

Dwa podobne programy korzystające ze wspólnej bazy danych - jak to zrobić najlepiej? - serwer sql, baza danych, delphi, wersjonowanie

tworzymy oprogramowanie do zarządzania uczestnikami dotacji przyznawanych organizacjom non-profit. (na przykład, jeśli twoja rodzina potrzebuje znaczków żywnościowych, to biuro musi jakoś śledzić twoją rodzinę i zgłaszać się do państwa)

Do tej pory byliśmy skupieni na jednymszczególnie złożona dotacja. Teraz chcemy rozszerzyć się na inne granty. Naszym pierwszym celem była dość uproszczona dotacja. Kod został po prostu ułożony na starej aplikacji. Teraz zdecydowaliśmy, że najlepszym sposobem działania jest rozdzielenie dwóch programów (ponieważ nie wszyscy nasi klienci mają obie stypendia). To brzmi łatwo w teorii.

Możemy zarządzać złożoną złożonością koduprzez to całkiem łatwo z łatkami i funkcją łączenia SVNów. Rzeczą znacznie trudniejszą jest to, że ich baza danych jest taka sama. Te dwie stypendia mają kilka tabel i kilka procedur. Ale jest to raczej duża baza danych (ponad 40 tabel, 100 procedur składowanych).

Jaki dokładnie jest najlepszy sposób na zachowanie tych dwóchoddzielne bazy danych, ale nadal dzielą się wspólnymi elementami? Nie jesteśmy zaniepokojeni konfliktami między dwoma aplikacjami piszącymi do tego samego DB (mamy na to blokady), ale raczej jesteśmy zaniepokojeni konfliktami schematów w rozwoju i aktualizacją serwerów naszych klientów oraz zarządzaniem złożonością.

Mamy kilka opcji, o których myśleliśmy:

  1. Używanie schematów (shared, grant1, grant2)
  2. Używanie prefiksowanych nazw

Odpowiedzi:

2 dla odpowiedzi № 1

Książka SQL Antipatterns miał rozwiązanie tego typu rzeczy. Udostępnianie wspólnych danych jest w porządku, wystarczy przenieść rozszerzone dane do osobnej tabeli, podobnie jak rozszerzenie klasy w OOP.

Persons Table
--------------------------
PersonID      LastName       FirstName

FoodStamps Table (From Application 1)
--------------------------
PersonID      FoodStampAllotment

HousingGrant Table (From Application 2)
--------------------------
PersonID      GrantAmount

Jeśli chcesz, możesz dodać przedrostki do tabel rozszerzonych.

To zapytanie zaprowadzi mnie właśnie do osób w programie FoodStamps:

SELECT * FROM Persons
JOIN FoodStamps
ON FoodStamps.PersonID = Persons.PersonID