代码之家  ›  专栏  ›  技术社区  ›  Shawn D.

我应该在代码中自动创建DB表,还是在安装过程中预初始化?[关闭]

  •  3
  • Shawn D.  · 技术社区  · 14 年前

    我有一个Java应用程序,它使用一个带有嵌入式驱动程序的apachederby数据库。现在,在安装过程中,我运行了SQL create脚本。

    因此,当应用程序启动时,表已经存在。最近,我开始认为最好是将我的SQL脚本放在类路径中,加载它,然后执行所有语句,以便在启动时创建表。数据库本身可以在丢失时自动创建,因此这似乎是引导表的一种不太容易出错的方法。

    在应用程序启动时检测是否存在表/在进程中创建表与希望通过安装正确设置表之间,我是否可能遇到任何问题?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Instantsoup    14 年前

    我认为您的第一步应该是在安装期间构建它们,并在运行时优雅地失败。然后把失败的部分优雅地充实起来,自我修复。

    在我看来,检测和处理过程中的错误状况总是比假设(预期)和崩溃要好。

    我主张不要“期望”安装程序正确设置表。我不是说你不应该在安装过程中设置数据库。我提倡的是验证数据库完整性的代码。如果您有验证模式存在和设计的代码,并且可以修复/重建,那么您就不必担心安装是否正确地设置了所有内容。这并不意味着你不应该在安装过程中创建,尤其是在安装速度很慢的情况下。

    这要求您在上下迁移时非常勤奋(或者,如果您不需要回退的话,只需要向上迁移),但我发现这是一个非常灵活和有用的解决方案。当然,您需要它对多个启动、用户配置差异具有健壮性,并且能够优雅地处理错误情况,但在我看来,这是本课程的标准。

        2
  •  0
  •   JSBÕ±Õ¸Õ£Õ¹    14 年前

    我将依赖于他们在安装过程中发生。如果您在启动期间自动创建它们,那么您必须担心多个并发启动,这种情况在安装期间发生的可能性要小得多(而且您的安装程序框架可能已经处理了这种情况)。

        3
  •  0
  •   Patrick    14 年前

    我认为为用户决定什么对他最好是个坏主意。假设应用程序是在不正确的数据库上意外启动的。您真的希望应用程序在这个不正确的数据库上创建表吗?

    如果用户不必创建表,而另一个负责人(管理员、关键用户)应该创建表,事情可能会变得更复杂。在这种情况下,您只需给出一个错误代码,并将用户指向该负责人。