5

我正在编写一个应用程序,该应用程序将作为服务和独立应用程序提供。它用 Zend Framework 编写并使用 MySQL。

在将其作为服务提供时,我希望用户在我的网站上注册并拥有诸如 customer1.mysite.com、customer2.mysite.com 之类的子域。

我希望将所有内容都放在一个数据库中,而不是为每个用户创建新数据库。

但现在我想知道如何做得更好。我想出了两个解决方案: 1. 在每个表中都有用户 ID,然后将其添加到每个数据库请求的 WHERE 子句中。2. 重新创建具有唯一前缀的表,例如“customer1_tablename”、“customer2_tablename”。

哪种方法更好?优点和缺点?是否有另一种方法可以将同一数据库上的用户分开?

莱昂蒂

4

4 回答 4

3

我会坚持将所有表放在一起,否则使用单个数据库几乎没有任何意义。这也意味着您可以切实可行地允许某种跨站点交互。只要确保将索引放在区分字段(customer_number或其他)上,就可以了。

如果表变得非常大而且速度很慢,请查看表分区

于 2009-11-26T14:18:47.407 回答
1

这取决于您打算如何处理数据。如果客户不共享数据,则按客户细分可能会更好;此外,您可能会获得更好的性能。

另一方面,当您想要更改结构时,拥有许多具有相同结构的表可能是一场噩梦。

于 2009-11-26T14:19:04.363 回答
1

我建议为每个用户使用单独的数据库。这使您的应用程序更容易编写代码,并使 MySQL 维护(单个帐户的迁移、帐户删除等)变得更容易。

此规则的唯一例外是您需要跨帐户访问数据或共享数据。

于 2009-11-26T14:38:03.423 回答
1

这称为多租户应用程序,很多人运行它们;看

多租户标签

对于一些其他人的问题

于 2009-11-26T16:28:14.650 回答