1)在Perl空间中组合一个sql语句(如何将这些不同的数据源转换成一个同构的最终格式),我有一个长的段落(这是我的困扰).所以sql字符串总是取决于我正在使用的数据类型. WHERE子句依赖,FROM子句依赖,INSERT子句依赖,这一切都取决于.这是高度的依赖性让我感到困惑.如何以面向对象的方式建模这个过程? MagicObject-> buildsql?这实际上是我现在的,但是觉得代码的所有部分都知道得太多,因此它的长度.
2)如果我有一个功能(建立sql?),我是否将整个业务对象传递给最后一刻呢?或者我们是否早期进行字符串化,只让我的函数处理所需要的内容,而不是渲染对象本身?
编辑:虽然我不怀疑ORM的重要性,但我不相信我们还在ORM领域.想象一下,美国,国家和虚构联盟的棒球数据都以不同程度的规范化方式以非常不同的格式存储.我的过程是读取这些数据源,将它们放在一个统一的标准化池中.我觉得在我的过程之后发生对这些物体的ORM空间.我是一个数据管理员,如果你愿意的话.由于缺少一个统一的池,我基本上没有任何商业对象可以采取行动.
编辑^ 2:已经引起了我的注意,也许我没有详细描述问题空间.这是一个例子.
想像你必须在美国制作一个所有罪犯的主数据库.您公司的服务正在销售一个位于顶端的产品,并以干净,统一的格式提供对这些数据的访问.
这些数据由50个州公开提供,但格式不同.有些是一个数据文件,没有正常化.其他是CSV格式的归一化表.有些是Excel文档.有些是TSV.甚至提供一些不经手动干预(其他手动创建的数据源)的记录.
我的项目的目的是为50个州的每一个制造一个“司机”,并确保该过程的最终产品是完美的关系模型中的罪犯的主数据库.一切都正确键入,完美形状的模式等
解决方法
my $user = $schema->table( 'user' ); my $q = Fey::sql ->new_select ->select( $user->columns( 'user_id','username' ) ) ->from( $user );
现在你可以编写一个这样的函数:
sub restrict_with_group { my ( $q,$table,@group_id ) = @_; my $group = $schema->table( 'group' )->alias; $q ->from( $table,$group ) ->where( $group->column( 'group_id' ),'IN',@group_id ); }
这将添加从用户到组的内部连接以及WHERE条件.瞧,您可以在主程序中写下列内容:
restrict_with_group( $q,$user,qw( 1 2 3 ) );
但是,这个restrict_with_group函数可用于任何具有组表的外键的查询!要使用它,您传递要限制的查询以及要应用限制的表,以及要限制的限制的组ID.