Oddzielna baza danych dla każdą firmę vs 1 baza

0

Cześć,
załóżmy, że chciałbym stworzyć taki portal jak ifirma.pl, fakturownia.pl etc. a przynajmniej coś podobnego. Chodzi o to, że firma może założyć sobie tam konto i na takim portalu może wystawiać faktury, prowadzić księgowość (wpisywać przychody i koszty), rozliczać pracowników etc. Robi to wszystko online, ma stały dostęp do danych itd.
Każda firma może mieć wielu użytkowników (pracowników), którzy mogą korzystać z takiej bazy.

I teraz pytanie: czy dla każdej takiej firmy zakładającej konto powinna być tworzona nowa baza danych z niezależnymi tabelami, czy może lepiej to zorganizować w jednej bazie danych i dodać po prostu ID dla firmy?

Jakie są wady i zalety obu tych rozwiązań?

Chciałbym skorzystać z bazy SQL Server Express a ona jak wiadomo ma dość duże ograniczenia m.in. jeśli chodzi o wielkość bazy - tak więc pod tym kontem uzasadnione jest, by każdy użytkownik miał swoją bazę danych. Z drugiej strony boję się troszkę problemów z wydajnością takiej aplikacji (nie wiem jaki wpływ na wydajność ma mnożenie baz danych na serwerze).

Oczywiście byłaby również oddzielna baza danych konfiguracyjna z nazwami firm etc. która byłaby w całości cashowana.

0

Weź pod uwagę RODO. Dane powinny być separowane.

0

Tu nie ma dobrego rozwiązania

  • oddzielne bazy to np. problem z aktualizacjami
  • jedna baza to np. problem z bezpieczeństwem danych, przez ewentualny błąd w aplikacji użytkownik może dostac podgląd w dane innych użytkowników
0

Najprościej to jeden kontener per klient. Najprościej dla programisty, gorzej dla architekta i devopsa.

2

Chciałbym skorzystać z bazy SQL Server Express

No to chyba nie ma za bardzo o czym mówić, i tak będziesz musiał rozdzielić użytkowników na bazy, bo wrzucenie wszystkich do jednej może skończyć się zapchaniem limitu baaaardzo szybko. A skoro i tak musisz rozdzielać, to zamiast się bawić w jakieś grupwoania po 2, 5 czy 14 w jednej bazie, zrób dla każdego osobną bazę i po temacie.

P.S. Dlaczego korzystasz z tego silnika, a nie np. z Postgresa? Jest darmowy, bez limitów i naprawdę jest dobry.

4

PostgreSQL:

Jest jeszcze komercyjna wersja (z dodatkami), ale nie wiem kto tego i do czego używa: https://www.enterprisedb.com/products/edb-postgres-platform

Trzeba mieć dobre uzasadnienie żeby stosować coś innego - nawet jeśli jest za darmo.
Można dyskutować czy MySQL czy PostgreSQL.
Ale MS Express to chyba tylko jeśli chcesz zaraz stawiać pełny MS SQL.

0

Dziękuję za wasze odpowiedzi i wsparcie!
Nigdy nie miałem do czynienia z PostgreSQL, ale na pewno się jemu przyjrzę.
A gdybym miał przejść na PostgreSQL to rozumiem, że mimo wszystko lepiej zakładać nową bazę dla każdej nowej firmy?

1

@WojtekASP IMO zaletą PostgreSQL jest prostota obsługi i łatwy interfejs. Próg wejścia jest bardzo niski więc o to że z nim nie pracowałeś się nie martw :)

1

Tworzenie za każdym razem nowej bazy może być kosztowane i tricky w wykonaniu
Wrzucenie wszystkiego w jedną bazę z tabelami zaś spowoduje rozpiździaj pewnie po jakimś czasie

Połączeniem tego, czymś po środku jest wykorzystanie schema w postgresie i logika 1 tenant = 1 schema, plus do tego jedna publiczna dla wszystkich
wtedy ta 'schema' to tak jakby 'nowa' baza ale zamknięta w jednej bazie

fajny przykład rrozwiązania tego to choćby django tenants
dla innych języków/frameworków też pewnie coś takiego pod postgresem jest

Tu jest w ogóle fajny paper w tym temacie, akurat odnośnie aws'a, ale trochę mówi o co chodzi i który model ma jakie zalety
https://d0.awsstatic.com/whitepapers/Multi_Tenant_SaaS_Storage_Strategies.pdf

2
WojtekASP napisał(a):

I teraz pytanie: czy dla każdej takiej firmy zakładającej konto powinna być tworzona nowa baza danych z niezależnymi tabelami, czy może lepiej to zorganizować w jednej bazie danych i dodać po prostu ID dla firmy?

A ile ma być tych firm? Jeśli 10, to jeszcze można mieć oddzielne bazy, jeśli 1000, to zarządzanie nimi będzie masakrą.
Jak duże te firmy? Jeśli takie z setkami pracowników i tysiącami faktur miesięcznie, to oddzielne bazy mają sens. Jeśli JDG z mniej niż dziesięcioma fakturami miesięcznie, to te oddzielne bazy osiągną 1MB danych po 10 latach, czy warto się tak rozdrabniać?

Ergo - statystyka i rozsądek nakazują zrobić jedną bazę, chyba że masz niestatystyczną grupę docelową.

Chciałbym skorzystać z bazy SQL Server Express a ona jak wiadomo ma dość duże ograniczenia m.in. jeśli chodzi o wielkość bazy - tak więc pod tym kontem uzasadnione jest, by każdy użytkownik miał swoją bazę danych. Z drugiej strony boję się troszkę problemów z wydajnością takiej aplikacji (nie wiem jaki wpływ na wydajność ma mnożenie baz danych na serwerze).

Spodziewałbym się problemów. Sam masz zamiar to hostować, czy gdzieś? Jeśli gdzieś, to będziesz prawdopodobnie musiał płacić za każdą dodatkową bazę.

Oczywiście byłaby również oddzielna baza danych konfiguracyjna z nazwami firm etc. która byłaby w całości cashowana.

Cachowanie, czyli kolejny problem.

Poza tym, to o co pytasz, to nie jest decyzja, której nie można zmienić. Zawsze też można zacząć z jedną bazą, a jak projekt się rozrośnie i jedna przestanie wystarczać, to podzielić dane na wiele.

cw napisał(a):
  • jedna baza to np. problem z bezpieczeństwem danych, przez ewentualny błąd w aplikacji użytkownik może dostac podgląd w dane innych użytkowników

Ten problem ma praktycznie każda komercyjna baza na świecie.

vpiotr napisał(a):

Ale MS Express to chyba tylko jeśli chcesz zaraz stawiać pełny MS SQL.

Albo nie znasz niczego innego i chcesz mieć przyjemną integrację z Visual Studio podczas tworzenia aplikacji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1