En fråga jag skulle vilja ha svar på är behöver du någonsin se data över kunder för din egen rapportering eller användning? I det här fallet måste du gå med nummer ett annars kommer du att få en mardröm att få bra rapportering.
Kommer du att göra någon anpassning av kunden? Detta skulle tyda på att att separera saker kan vara ett bättre val. Om du aldrig kommer att anpassa, separera inte.
Jag har arbetat med system i alla dessa alternativ och det första är överlägset bäst för långsiktigt underhåll. Men alla är genomförbara om du är organiserad och planerar väl. Om du väljer det separata alternativet måste du kunna pusha ändringar till alla klienter och måste därför göra ändringar i databasen genom skript som hålls i källkontroll. Du kan till och med behöva behålla en källkontroll efter databasversion, så att klienter kan välja att uppgradera eller inte. I alternativ 1 har naturligtvis ingen möjlighet att stanna på den gamla versionen. Om det passar ditt företags behov bättre är det ett plus för alternativ 1.
Jag håller starkt med Ollie Jones, om du använder alternativ ett måste du ha en bra databassäkerhetsdesign för att hindra klienter från att se data från andra klienter. Vi flyttade en gång en klient från en server där de var den enda klienten till en delad databas och bara en proc som missade att fråga efter client_ID (det behövdes inte i det gamla systemet och utvecklarna hade blivit slarviga) slutade med att maila alla säljare för alla andra kunder med information om den första kunden. Detta kostade företaget mycket pengar (både för att åtgärda problemet, för att skicka ut e-post om ursäkter och vi förlorade nästan en kund som ett resultat och var tvungna att ge dem några kostnadsavbrott för att behålla dem) och många krånglande ursäkter och utvecklaren bara snävt saknade att förlora sitt jobb. Låt detta vara en läxa som du inte lär dig den hårda vägen.