首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为数据库表创建数据库

为数据库表创建数据库
EN

Software Engineering用户
提问于 2013-04-22 10:20:04
回答 4查看 378关注 0票数 1

我正在进行一个项目,在这个项目中,我必须让用户能够构建自己的表,每个用户都可以创建多个表。

(所有数据的类型为字符串)。

用户可以创建一个表,并指定需要在其中包含哪些列。

做这件事最好的方法是什么:

  1. 动态创建数据库
  2. 要有表的表(键,值.)。
  3. 一些其他的东西

另一个问题是:是否最好将我的数据库分为两个,一个用于内部使用(用户,帐户,.)另一个是用户的表(还是表的表)?

EN

回答 4

Software Engineering用户

发布于 2013-04-22 10:56:51

我认为最明智的方法是为每个用户建立一个数据库。大多数数据库的构建都是为了更好地处理安全性,如果一个用户对自己的数据库拥有权力,而没有其他任何东西(您将希望使用一个特殊的后端用户来创建数据库,创建用户,并为该用户分配访问该数据库的权限

每个用户都将拥有自己的数据库,其权限只允许修改该数据库。这使得一切变得更加直截了当。您不再需要将所有的内容都转换为虚拟的,因为数据库上的大多数问题都可以简单地转发给用户。您需要一个主数据库来跟踪用户、权限和他们的数据库。许多数据库都提供元信息,但我不建议使用它,至少不推荐给用户使用,因为任何额外的信息都必须自己管理,所以您可能会做最终必须做的事情。

此时您不应该在master中保存一件事,那就是一个表--这,您真的应该留给数据库来管理。如果需要一个表列表,则可以查询元数据以获取此信息。

此时,您唯一真正关心的是数据库名称冲突。要解决这个问题,您可以做以下几件事情中的一件:

  1. 你自己说吧。这将是一个丑陋的名字,这不是最受用户欢迎的决定,但这是最容易做到的。
  2. 让它们提供名称,然后执行虚拟名称到实际名称的某种映射,由您自己创建。这很简单,但您需要自己解析查询并替换名称(我不推荐它!)。
  3. 将用户名附加到他们选择的数据库名称的左侧,这样就不可能出现名称冲突(使用某种不能在数据库名称中使用的字符分隔器,以便不必担心数据库"atloaf“的用户"me”和创建相同名称的数据库"loaf“的用户”肉类“)。

这显然是一种数据库密集型的解决方案,因为您主要依靠数据库引擎来承载您能够或不能完成的任务背后的逻辑,因此,我强烈建议您知道如何维护数据库(安全性是您最终选择的主要优先级)。

随着时间的推移,如果您需要某些您无法正常使用数据库获得的行为,您可以覆盖某些功能,但是这种方法当然是有利的,因为您已经完成了很多逻辑,很少或根本没有调整。

票数 1
EN

Software Engineering用户

发布于 2013-04-22 10:45:21

您期望有多少用户?我建议不要为用户创建新的表。这可能会很快创建一个非常大的数据库。

看看EAV (实体-属性值)模型。这是相当灵活的。http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_模型

这样,就可以有一个存储用户表的表。

票数 0
EN

Software Engineering用户

发布于 2013-05-18 21:14:08

您应该在表的前缀加上用户名,比如userName_tableName模式。userName将是创建表的用户的名称。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/195696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档