【问题标题】:Database Schema Generator [closed]数据库模式生成器[关闭]
【发布时间】:2010-12-13 08:48:33
【问题描述】:

我有一个描述数据库表的所有表结构的 excel 文件

我想从这个 excel 文件为 sqlite3 数据库生成数据库模式图和数据库模式结构。

知道怎么做吗?

谢谢。

【问题讨论】:

  • 假设表结构/字段足够大,不能手动输入,我会保存分隔的 Excel 电子表格选项卡,然后编写一个程序将新文件解析为正确的文本 SQL 调用创建您的架构。然后,您可以在您选择的 SQL 数据库上将其作为脚本运行。
  • 这是我正在寻找的,但不知道如何编写脚本。
  • 我已经通过多种方式编写了数据库创建脚本 - 包括从 Excel/CSV - 建议您在问题中添加表定义,以便我们查看格式并提供建议。

标签: database excel sqlite schema


【解决方案1】:

假设每个选项卡都以表格命名并且具有这样的单元格:

Name    DataType
ID    integer
Name    varchar(255)

分别使用python-excelApache POI for Excel 使用Python 或Java 读取工作簿。我确信其他语言,特别是 .NET 也有用于此目的的库。两种语言也都有用于 sqlite3 的驱动程序。

遍历每个选项卡 - 使用表 CREATE 语句的选项卡名称。遍历选项卡上的每一行并使用该信息来定义表的列。定义诸如主键/外键和自动递增之类的东西将需要一些额外的单元格或命名约定+一些聪明的算法。

很可能每个 CREATE 语句都需要通过数据库连接单独传递。

【讨论】:

    【解决方案2】:

    通常有比 Excel 更好的工具来执行此操作。从您的 SQLite3 数据库开始,并使用具有 WinSQL 之类的架构编辑器的数据库管理器对其进行分析。

    【讨论】:

    • 数据库结构已经在excel文件中描述。因此,我需要提取到模式编辑器中。
    【解决方案3】:

    假设 Excel 包含字段名和类型列 我会编写一个很小的 ​​VB 脚本,它将这些对转换为 Java SQL 字符串,例如:

    private static final String DATA_CREATE="create table if not exists\n"
            + "MYTABLE\n"
            + "DATA_ID integer primary key autoincrement,\n"
            + "RAW_ID integer not null,\n"
            + "ORDER_ID integer not null,\n"
            + "CHUNK blob);";
    

    然后只需将类似的字符串添加到您的 Java 源代码中。或者作为选项,您可以将 SQL 脚本写入文件,将它们放在资产中的某个位置,然后从 SQLite 运行它们

    【讨论】:

      【解决方案4】:

      如果我要编写这样的程序,我会做出以下假设:

      • 工作表将成为表名。
      • 列标题将成为列名。
      • 列的格式规则将控制数据类型。

      考虑到这些限制,您可以创建导入和创建工具。

      要在 Java 中执行此操作,我会使用可以读取 excel 的库 文件,例如 Apache POI: (这是我使用的maven依赖)

          <dependency>
              <groupId>org.apache.poi</groupId>
              <artifactId>poi</artifactId>
              <version>3.6</version>
          </dependency>
      

      使用 POI 读取 excel 文件,分析列和 在 sqllite 数据库中动态创建表。 (放下 表(如果存在)。然后根据类型生成一个准备好的 语句并根据工作表中的每一行插入数据。

      这将是基本设置。从那里你必须决定如何 如果需要,可以做外键等等。

      【讨论】:

        【解决方案5】:

        我认为你的要求是不可能的。

        您的问题的解决方案是从 excel 发布示例表,并请求帮助将其转换为 SQL

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-22
          • 2011-01-15
          • 2020-10-20
          • 1970-01-01
          • 2011-11-12
          • 2010-09-09
          相关资源
          最近更新 更多