在运行时动态创建表

时间:2011-08-05 14:13:55

标签: database-design web-applications

是否在运行时根据用户的交互动态创建表格对于Web应用程序来说是好事还是坏事? (我说的是java,但问题可能适用于更多)。

5 个答案:

答案 0 :(得分:3)

总的来说,不是,这不是一个好主意。通常情况下,他们创建的任何内容都是表格中的记录。

但也有例外情况,例如,如果您要为他们创建一个托管帐户,那么他们将使用他们个人使用的表。

如果没有详细说明你的情况,我无法给出更好的答案。

答案 1 :(得分:3)

表通常对用户与数据库的交互至关重要。因此,没有桌子是致命的。

由此可见,在运行时动态创建表是一种不好的做法,因为这意味着无法保证用户的体验。如果CREATE TABLE语句因任何原因失败,则会填充用户。

因此,避免依赖于运行时创建表的业务流程是个好主意。通常有解决方法,除非在非常具体的情况下。

在某种程度上,这取决于支持应用程序的RDBMS的风格。例如,Oracle具有全局临时表的概念,它几乎在所有情况下都删除了动态表创建的调用。但即使没有这些花哨的功能,通常也会有这样的方法:例如,将一个USERNAME列添加到表中并在其上构建一个视图,其中包含对USERNAME=USER进行过滤的WHERE子句。

基本上,就经过的时间和系统资源而言,DDL的执行成本很高。它创造了交易复杂性。它有风险:如果失败则用户无法继续。因此,出于所有这些原因,应该避免这种情况。

答案 2 :(得分:0)

对于SQL-Server,创建临时表,表变量,使用表值函数等是一种非常常见的做法。例如,它将在Web应用程序调用的数据库存储过程中完成。

如果说这是好事还是坏事,我知道没有严格的规则 - 取决于具体情况。

答案 3 :(得分:0)

我猜你在做这样的事情:

table_username(
id, 
userfield1, 
userfield2, 
ect...
)

另一种方法是创建一个静态表,如下所示:

table_userfields(
id
userid
fieldname
fieldvalue
)

唯一的问题是字段值可能必须是一个大的varchar。

但是你的方法并没有错,这取决于你的具体需求。

答案 4 :(得分:0)

一般来说,除非您的用户都是优秀的数据建模者,否则这不是一个好主意。大多数用户没有成为优秀的数据库设计师普通用户不会考虑做出正确选择数据类型和密钥,设计编码方案,分析依赖关系或应用规范化原则之类的事情。创建良好的数据模型很难,这就是为什么它倾向于留给专家。