多租户数据库设计 - 为每个用户创建的数据库

3
我正在开发一个Web应用程序,需要用户拥有自己的私有数据。我的原始计划是创建一个存储表,一个用户表和一个用户存储交叉表。然后我会在存储表中保存该店铺的数据库名称(并使用应用程序用户和密码创建每个特定于店铺的数据库,以便Web应用程序可以始终登录)。
每个商店将拥有类似的数据(用户、产品、运输方式等),我知道我可以使用外键引用来在一个庞大的数据库中将它们联系在一起。然而,由于数据非常具体且可能是专有的,使用我的原始设计还是使用单个数据库存储每个人的数据更好?
我考虑到扩展的问题,分离的数据库可能会更好,因为我们可以将更活跃的账户放在它们自己的(或更强大的)数据库服务器上,并在存储表中简单地添加一个服务器位置字段,如果需要的话。此外,这样做可能更安全,因为我们可以将用户登录信息添加到数据库中,并只给他们访问其数据的权限(防止一个用户编辑另一个用户的内容)。我的问题是,是否有我忽略的问题?几乎每篇关于这个问题的文章都说不要使用我考虑的方法,我也不是DBA。任何意见都会有帮助。
附加信息: 这将托管在我将拥有根访问权限的专用服务器上。我可以创建所需数量的MySQL数据库。

一个数据库。您需要多少个表就有多少个表。1个用户==用户表中的1行,1个产品==产品表中的1行,等等。听起来您可能需要掌握以下三种技能:1)SQL,2)HTML和3)PHP或Java。您可以在这里找到好的教程:http://www.w3schools.com/php/ - paulsm4
2个回答

7
我肯定会使用单个数据库。请使用以下内容开始。有几个原因可以选择单个数据库,但最重要的原因是避免维护噩梦。如果你需要更改模式,你将会遇到很多问题。 http://msdn.microsoft.com/en-us/library/aa479086.aspx

只有在非常极端的情况下,我才会采取为不同用户使用不同数据库的方式。也许例如如果我们谈论的是一组有限的客户,并且您需要从一个客户到另一个客户进行高度自定义(即使那样,我也可能不会这样做)。我指的是基于用户的不同模式、存储过程和视图。然而,随着客户数量的增加,它根本无法扩展。您必须对每个更改所做的更改进行相同的更改。不是每个干燥的代码。过一段时间后,它将变成一团糟。相信我,您不想要这个结果。 - Scott Adams
文章中的一个关键点是:“当应用程序需要能够使用少量服务器为大量租户提供服务时,共享模式是合适的”。我曾经与一家按数据库拆分客户的公司合作过。他们只有12个客户,但仍然是一场噩梦。不要让这种情况发生在你未来的自己身上。 - Scott Adams
由于我不知道MySQL是否支持模式,所以我猜您建议使用PostGres? - Mike
按照架构,我只是指的是您的数据库设计,例如表、列等... MySQL 是一个不错的选择。 - Scott Adams

3
在多租户数据库中,数据库设计人员需要考虑查询、成本、数据隔离和保护、维护以及灾难恢复等方面。多租户解决方案从每个租户一个数据库(“共享无关”)到每个租户一行数据(“共享一切”)不等。这篇SO答案总结了权衡取舍。如果你正在设计的数据库属于某种监管环境(HIPAA、FERPA等),那么该监管环境可能会优先考虑所有其他因素。
在某些情况下,每个租户一个数据库是一个可靠的决策。但是,在的情况下,这是否是最佳答案还不清楚。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接