繁体   English   中英

使用perl自动化sql连接

[英]automating sql joins using perl

我有一个前端Web应用程序,它查询MySQL数据库并向用户提供所请求的数据。 该数据库包含25个表; 有关键表的外键。 这里的问题是用户对SQL是全新的; 我不能指望他们加入这些表格。

我想编写一个自动生成连接的脚本。 我想知道Perl中是否有可用的模块使这项任务更容易?

我自己的SQL经验只用了几个月。 请告诉我你对此的看法。

我不知道任何模块一般地做它,并且创建一个非常不重​​要。 问题的范围从映射哪些主键/外键匹配(它们并不总是命名相同),到如何处理NULL值(内部或外部连接?)以确保完整的表集甚至可以完全连接。

此外,至少在Sybase(不确定MySQL)中,即使您获得了正确的数据,也有自动执行此操作的性能优化角度,这并非易事。

说实话,我会做的是以下内容:

  • 首先,强制将数据定义记录在配置中(包括表,列,主键和外键,以及连接到内/外连接)。

  • 在“主”表和“浓缩”表之间拆分。

    富集表是一个表,其唯一目的是将其主键连接到某些主表,以便为从主表中检索的每一行添加更多列(我甚至可以说不应该有任何位置)这些表上的条款除了加入以使生活更简单之外)。 例如,考虑一个名义库数据库。 “评论”表将是“浓缩”表 - 您只使用那里的数据来丰富书籍信息,而不是查询。 “顾客”表也将(对于某些商业用途)表示“浓缩表”,仅用于将顾客姓名/地址加入另一表中的patron_id。

  • 对于主表,忘记让用户构建查询。 简单地列举他们可能想要在业务场景中运行的每个查询(大多数可能的连接只是没有意义/不需要完成); 然后为每个场景写下非常明确的用户友好的描述,他们正在选择什么,然后针对该场景的主表进行优化查询。 另外,对于每个固定查询,构建一个在该查询中选择的FOREIGN密钥列表,这些密钥可能对用户有用,以便从丰富表中进行丰富。 (例如,如果在某些查询中选择了“patron_id”字段,则添加“patrons”作为可能的额外数据列出)

  • 然后允许GUI中的用户选择特定的用例场景。 找到与该方案匹配的预制查询。 然后显示可能的浓缩选项(包括顾客地址?y / n?)。 将这些额外的浓缩连接添加到预先查询的查询中相当容易。

我最好的建议是通过前端应用程序解析用户输入,然后使用它来解析Perl DBI的查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM