我正在进行一个项目,在这个项目中,我必须让用户能够构建自己的表,每个用户都可以创建多个表。
(所有数据的类型为字符串)。
用户可以创建一个表,并指定需要在其中包含哪些列。
做这件事最好的方法是什么:
另一个问题是:是否最好将我的数据库分为两个,一个用于内部使用(用户,帐户,.)另一个是用户的表(还是表的表)?
发布于 2013-04-22 10:56:51
我认为最明智的方法是为每个用户建立一个数据库。大多数数据库的构建都是为了更好地处理安全性,如果一个用户对自己的数据库拥有权力,而没有其他任何东西(您将希望使用一个特殊的后端用户来创建数据库,创建用户,并为该用户分配访问该数据库的权限
每个用户都将拥有自己的数据库,其权限只允许修改该数据库。这使得一切变得更加直截了当。您不再需要将所有的内容都转换为虚拟的,因为数据库上的大多数问题都可以简单地转发给用户。您需要一个主数据库来跟踪用户、权限和他们的数据库。许多数据库都提供元信息,但我不建议使用它,至少不推荐给用户使用,因为任何额外的信息都必须自己管理,所以您可能会做最终必须做的事情。
此时您不应该在master中保存一件事,那就是一个表--这,您真的应该留给数据库来管理。如果需要一个表列表,则可以查询元数据以获取此信息。
此时,您唯一真正关心的是数据库名称冲突。要解决这个问题,您可以做以下几件事情中的一件:
这显然是一种数据库密集型的解决方案,因为您主要依靠数据库引擎来承载您能够或不能完成的任务背后的逻辑,因此,我强烈建议您知道如何维护数据库(安全性是您最终选择的主要优先级)。
随着时间的推移,如果您需要某些您无法正常使用数据库获得的行为,您可以覆盖某些功能,但是这种方法当然是有利的,因为您已经完成了很多逻辑,很少或根本没有调整。
发布于 2013-04-22 10:45:21
您期望有多少用户?我建议不要为用户创建新的表。这可能会很快创建一个非常大的数据库。
看看EAV (实体-属性值)模型。这是相当灵活的。http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_模型。
这样,就可以有一个存储用户表的表。
发布于 2013-05-18 21:14:08
您应该在表的前缀加上用户名,比如userName_tableName模式。userName将是创建表的用户的名称。
https://softwareengineering.stackexchange.com/questions/195696
复制相似问题