我正在编写一个应用程序,我将作为服务提供,也可以作为独立应用程序提供。 它是用Zend Framework编写的,并使用MySQL。
将其作为服务提供时,我希望用户在我的网站上注册,并拥有customer1.mysite.com,customer2.mysite.com等子域名。
我希望将所有内容都放在一个数据库中,而不是为每个用户创建新的数据库。
但现在我想知道如何做得更好。 我想出了两个解决方案: 1.在每个表中都有用户ID,并在每个数据库请求中将其添加到WHERE子句中。 2.重新创建具有唯一前缀的表,例如'customer1_tablename','customer2_tablename'。
哪种方法更好?优点和缺点? 是否有另一种方法可以在同一个数据库中分隔用户?
Leonti
答案 0 :(得分:3)
我会坚持将所有表保持在一起,否则使用单个数据库几乎没有任何意义。这也意味着您可以在轨道上实现某种跨站点交互。只要确保你将索引放在差异化字段(customer_number
或其他)上,你应该没问题。
如果表格变得非常大而且速度慢,请查看table partitioning。
答案 1 :(得分:1)
这取决于您打算如何处理数据。如果客户不共享数据,客户细分可能会更好;另外,你可能会有更好的表现。
另一方面,当你想要改变结构时,拥有许多具有相同结构的桌子可能是一场噩梦。
答案 2 :(得分:1)
我建议为每个用户使用单独的数据库。这使您的应用程序更容易编码,并使MySQL维护(单个帐户的迁移,帐户删除等)。
此规则的唯一例外是,您需要跨帐户访问数据或共享数据。
答案 3 :(得分:1)