Gsoc08-querybuilder

来自PostgreSQL wiki
跳转到导航跳转到搜索

提案

摘要

pgAdmin III 的一个图形界面改进,允许用户以可视化的方式构建完整的 SQL 语句,无需输入任何子句(只有在真正需要时才输入)。以简单的方式构建复杂的 SQL 查询,减少调试、语法和逻辑错误。

详细内容

该项目的核心思想是创建一种新的查询 PostgreSQL 数据库的方式,在查询创建时间方面非常高效,并且学习曲线的额外开销最小。因为当用户使用数据库时,他们所做的主要操作是对数据库管理的数据进行查询,而这必须使用特定语言(如 SQL)完成,但是学习这种语言存在一些困难,例如 [1]

  • 用户必须很好地了解要查询的数据库对象的结构和名称。
  • 用户可能对 SQL 语言和数据库数据模型有错误的理解,这会让他们难以理解如何创建满足其需求的有效 SQL 语句。
  • 对于初学者来说,使用不友好的命令行界面或允许通过输入命令来构建 SQL 语句的 IDE 比较困难,因为缺乏对语义错误的良好解释,以及在创建 SQL 语句时对错误的反馈不足。

出于这些原因,主要目标是使用最少的用户交互来以可视化的方式查询数据库,在代码输入或数据库模型结构知识方面(不需要深入了解数据库模型结构,如实体关系模型来查询它),因此该项目至少有四个主要开发领域

  1. 与 PostgreSQL 数据库通信以进行数据库表的逆向工程。这可能可以通过重用 pgadmin 源代码来实现。
  2. 用户可以拖动组件并以可视化的方式构建 SQL 语句的工作空间的图形表示,这包括将用户在这个工作空间上的命令转换为查询的内部表示结构。
  3. 用户以可视化的方式创建的查询的内部表示,以及基于此表示生成 SQL 语句。
  4. 检索数据并显示的 SQL 语句。

这四个部分协同工作,为以可视化的方式查询数据库提供了一个完整的解决方案,或者换句话说,一个图形查询构建器。

对 PostgreSQL 社区的益处

该项目为 PostgreSQL 社区带来的主要益处是

  1. 提高数据库管理员的效率,因为他们不需要对应用程序的数据库表结构有很深的了解就可以为这些表创建一个查询,他们所需的一切都将以可视化的方式提供,他们可以仅通过拖动组件或提供几次点击和少量信息来引入列、表、限制等等。节省的时间可以用来优化数据库,例如。
  2. 消除对实际了解 SQL 语言的人使用 pgAdmin 查询界面的限制。允许非常新手的人创建“复杂”的 SQL 语句,而无需真正了解 SQL 语言。这意味着学习如何使用 PostgreSQL 数据库,并且技术知识很少的人可以以他们以前不可能的方式查询存储在表格中的数据库数据,因为他们缺乏 SQL 知识。因此,PostgreSQL 对那些使用 Excel 或 Access(或 OpenOffice 中的等效软件)等应用程序的人更加友好,他们可以使用它而不必担心学习 SQL 来访问存储数据。
  3. 这些改进可以随着时间的推移扩展,允许创建不同格式的报告(例如使用这种可视化查询方式的报表工具),作为实体关系模型器的基础,甚至可以根据用户在未来的规范创建数据库应用程序源代码。

交付成果

该项目的交付成果可以分成几个部分,这些部分会随着时间的推移而增长,因为将使用迭代增量的方法

  • 交付成果 1: pgAdmin 的基础改进源代码。
    • 包括所有存储在内部的数据库表结构(或研究如何使用 pgAdmin 的结构和源代码来完成这项任务)所需的类,这些类可以包含在查询中(用户有访问权限)。
  • 交付成果 2: 初始图形工作空间。
    • 这将是表组件可以拖放的空间。
    • 包括在此空间中表示表格及其列。
  • 交付成果 3: 用于表示用户以可视化的方式创建的基本查询语句的内部类,包括
    • 以非常基本的方式在应用程序中表示用户以图形方式创建的查询所需的源代码,该方式仅允许添加一个包含列选择的表格,并在用户在工作空间上进行事件操作时选择列(例如鼠标点击)。
    • 生成用户在工作空间中引入的基本 SQL 语句。
  • 交付成果 4: 图形工作空间的改进。
    • 允许以可视化的方式连接表(等值连接)。
    • 包括对用户创建的查询语句表示使用的内部类的改进。
    • 图形工作空间的改进,允许连接表示。
  • 交付成果 5: 对类的改进,允许向查询列添加单行函数,以及在 where 子句中添加限制,并允许其他类型的连接查询,如外连接或非等值连接。
  • 交付成果 6: 查询语句的改进,允许使用 order by 子句。
  • 交付成果 7: 查询语句的改进,允许使用 group by、having 语句和多行函数。

预计时间线

  • 5 月 26 日 - 6 月 31 日,第 1-7 周,交付成果 1
  • 6 月 8 日 - 14 日,6 月 15 日 - 21 日,第 3-4 周,交付成果 2
  • 6 月 22 日 - 28 日,6 月 29 日 - 7 月 5 日,第 5-6 周,交付成果 3, 4(部分)
  • 7 月 6 日 - 12 日,7 月 13 日 - 19 日,第 7-8 周,交付成果 4
  • 7 月 20 日 - 26 日,第 9 周,交付成果 5
  • 7 月 27 日 - 8 月 2 日,第 10 周,交付成果 6, 7(部分)
  • 8 月 3 日 - 9 日,第 11 周,交付成果 7
  • 8 月 10 日 - 17 日,第 12 周,测试和消除 错误

其他资源

参考文献

[1] Mitrovic, A: "Learning SQL with a computerized tutor", Proceedings of the twenty-ninth SIGCSE technical symposium on Computer science education, p. 307