我有一个为卡车公司开发的Web应用程序,我希望将其作为SaaS提供。如何设计数据库最好?
我应该为每家公司创建一个新的数据库吗?还是应该使用一个具有公司名称前缀的表的单个数据库?或者我应该使用一个具有每个表的唯一公司ID字段的数据库?还是有其他方法可以实现?
我有一个为卡车公司开发的Web应用程序,我希望将其作为SaaS提供。如何设计数据库最好?
我应该为每家公司创建一个新的数据库吗?还是应该使用一个具有公司名称前缀的表的单个数据库?或者我应该使用一个具有每个表的唯一公司ID字段的数据库?还是有其他方法可以实现?
我应该为每个公司创建一个新的数据库吗?
是的 - Don Dickinson是正确的。但请见下面的细化。
还是我应该使用一个数据库,其中表具有公司名称的前缀?
当然不!更改不同客户端的数据库查询将让您发疯!此外,您几乎肯定会运行动态SQL(在运行查询之前在代码中更改表名),这会损害性能,因为大多数服务器喜欢缓存查询计划和中间结果 - 如果表名不断更改,则无法实现缓存。
还是我应该使用一个数据库,每个表只有一个,并向表添加公司id字段?
如果您想要为客户提供可扩展的模型,可能需要这样做。虽然为每个客户提供新数据库可以为您提供很多灵活性,但这也涉及成本和复杂性。您必须为处理已过期的客户创建新的备份计划和生命周期模型等。
因此,您可能会说“免费试用”和“铜牌”客户都被集中到单个数据库中,使用公司ID来将它们分开; “银牌”用户获得自己的数据库(但仍然在模式中保留customer_id字段,因此您不必在两个客户级别之间更改查询),而“金牌”客户获得自己的数据库服务器。
几年前我在一家SaaS公司做过类似的事情 - 客户通常很高兴拥有基础设施(即性能和韧性)以及功能的升级路径。
这要看情况,我在一家公司工作,该公司有许多像其他公司一样被视为“内部业务单元”的部门。 因此,某些报告必须包括所有公司,客户账户也必须在公司之间共享。我们在表格中有一个需要填写的CompanyId字段。 前缀解决方案肯定是要避免的。