sql >> Databáze >  >> RDS >> Mysql

Návrh DB:jedna velká DB pro všechny zákazníky nebo mnoho malých DB

Jedna otázka, na kterou bych chtěl odpovědět, je, potřebujete někdy vidět data napříč zákazníky pro své vlastní reportování nebo použití? V tomto případě musíte jít s číslem jedna, jinak budete mít noční můru získat dobré zprávy.

Budete provádět nějaké úpravy podle zákazníka? To by naznačovalo, že oddělení věcí může být lepší volbou. Pokud se nikdy nebudete přizpůsobovat, neoddělujte se.

Pracoval jsem se systémy ve všech těchto možnostech a první z nich je zdaleka nejlepší pro dlouhodobou údržbu. Všechny jsou však funkční, pokud jste dobře organizovaní a plánovaní. Pokud zvolíte samostatnou možnost, musíte být schopni zasílat změny všem klientům, a proto musíte provádět změny v databázi pomocí skriptů, které jsou uchovávány v řízení zdroje. Možná budete dokonce muset ponechat kontrolu zdroje podle verze databáze, aby si klienti mohli vybrat, zda upgradovat nebo ne. U možnosti 1 samozřejmě nikdo nemá možnost zůstat na staré verzi. Pokud to lépe vyhovuje potřebám vaší firmy, je to plus pro možnost 1.

Důrazně souhlasím s Ollie Jonesem, pokud použijete možnost jedna, musíte mít dobrý návrh zabezpečení databáze, aby klienti nemohli vidět data ostatních klientů. Jednou jsme přesunuli klienta ze serveru, kde byl jediným klientem, do sdílené databáze a pouze jeden proces, který zmeškal požadavek na client_ID (ve starém systému to nebylo potřeba a vývojáři byli nedbalí), skončil e-mailem. obchodní zástupci všech ostatních klientů s informacemi o prvním klientovi. To stálo společnost spoustu peněz (jak opravit problém, poslat e-mailové omluvy a v důsledku toho jsme málem přišli o klienta a museli jsme mu dát nějaké pauzy, abychom si ho udrželi) a mnoho ubrečených omluv a vývojář jen těsně. zmeškal ztrátu zaměstnání. Nechť je to lekce, kterou se nenaučíte tvrdě.



  1. Jak používat proměnnou řadiče v Views + cakephp

  2. Flushing Single Cursor

  3. Sequelize vrátí tabulku spojení v dotazu

  4. SqlNullValueException při provádění uložené procedury pomocí MySqlCommand