我正在使用 Zend 2 和 Doctrine 2 构建一个产品,它要求我为每个用户都有一个单独的表来包含他们独有的数据。我已经创建了一个实体来定义该表的外观,但是如何更改表的名称以在运行时将数据保存到,或者实际上从中检索数据?
或者,我是否会更好地为每个用户提供自己的数据库,而只是更改我要连接的数据库?
我正在使用 Zend 2 和 Doctrine 2 构建一个产品,它要求我为每个用户都有一个单独的表来包含他们独有的数据。我已经创建了一个实体来定义该表的外观,但是如何更改表的名称以在运行时将数据保存到,或者实际上从中检索数据?
或者,我是否会更好地为每个用户提供自己的数据库,而只是更改我要连接的数据库?
我首先会质疑设计选择。如果在运行后创建一个新用户会发生什么。必须先创建表吗?此外,您要存储什么样的数据,对我来说,这听起来像是一种非常常见的多客户端功能。喜欢:
tbl_clients
- id
- name
tbl_clientdata
- client_id
- data_1_value
- data_2_value
- data_n_value
如果您真的想存储用户数据,则必须采用单独的数据库路线。但这只有在每个“用户”真正相互独立时才有效。好好想想吧。
如果您正在构建某种软件即服务,而用户 A 和用户 B 只是您的两个不同客户,彼此没有任何关系,那么 N+1 数据库可能是合适的(一个 db 用于您的 N 个用户中的每一个,加上一个“元”数据库,它只保存用户帐户(可能还有与计费相关的东西)。
我在 ZF2/Doctrine2 中实现了类似的东西,而且还不错。您只需为 EntityManager 创建一个工厂,它会查找任何活动用户的数据库信息,并配置 EM 以连接到它。唯一有点棘手的地方是当你发现自己在编写某种共享作业队列时,长时间运行的工作人员需要定期切换数据库连接——但这也是可行的。