Problem:
Let's say that we have 5 clients. At the moment each client has it's own copy of the database. This is because there are millions of rows and we do not want load of one client's database to disturb the performance of another client's database.
This is not an optimal design because:
- Managing separate connections for each client is not flexible,
- Changes need to be propagated across more than one database, and
- A new database need to be created for each new client.
Question:
Is it possible to include all this data into one database but have some form of physical isolation between the client data so that it performs similarly to having several databases?
This isolation would NOT be at a table (or schema) level, but more at a row level. For example, I don't want to have separate Employee
tables for each client (like Employee_ClientA
, Employee_ClientB
, Employee_ClientC
), but rather an Employee
table with a ClientID
foreign key. This means the data WITHIN a table would need to be physically separated.