【问题标题】:Determining Primary Keys from ODBC Openedge 10.2B从 ODBC Openedge 10.2B 确定主键
【发布时间】:2015-03-05 16:07:58
【问题描述】:

我目前正在为 Yii2 实现一个 ActiveRecord 驱动程序,这样我就可以通过他们推荐的 API 在我的 Yii 应用程序中利用我的进度数据库。但是,因为在 ActiveRecord 中需要设置主键才能正常运行(它必须知道哪些字段是记录的唯一标识符),所以我不得不在我创建的每个模型类上手动设置这些。 (驱动可以在https://github.com/ExchangeCore/yii2-progress-driver/tree/10.2.x查看)

我想知道的是,我是否忽略了某些方法或 SYSPROGRESS 表(或其他 ODBC 函数)实际上可能具有哪些字段是主键。我对 SYSINDEXES 表有一些希望,但我不确定如何正确识别哪个索引是主键。

【问题讨论】:

    标签: yii2 progress-4gl openedge progress-db


    【解决方案1】:

    Progress DB 没有“主键” - 最接近 PK 的方法是在该表上使用唯一索引。

    如果您在 _Index 表中查找给定的 _File._file-name,您需要一条 _Unique 为真的记录。

    【讨论】:

    • 我想我觉得这很难相信/奇怪,因为 JDBC 有一个名为 getPrimaryKeys 的 DatabaseMetaData 方法,它的描述是“获取表的主键列的描述”。我还认为您可以将键指定为主键
    • Progress 缺少 SQL 数据库通常所指的“外键”。尤其是暗示它们是“约束”或以某种方式自动执行的任何暗示。 Progress 确实支持索引,并且可以将索引标记为“主要”。将索引标记为“主要”是 4gl 优化器的决胜局,并且是默认排序顺序,但在其他方面几乎没有意义。
    • @TomBascom OpenEdge 似乎通过 SQL 引擎支持和尊重外键。可以理解的是,上述评论是一年多前提出的。如果有人路过这些cmets,也许他们可以评论documentation.progress.com/output/ua/OpenEdge_latest/#page/…
    【解决方案2】:

    _file._prime-index 是 _index 记录的 RECID,描述标记为“主要”的索引。

    它可能是唯一的,也可能不是唯一的(这不是要求)。

    我不是 SQL 人(我也不会在电视上播放),但是这个 4GL 代码会找到“活动”表的主索引(如果你有这样的表),告诉你它是否是唯一的并且列出构成索引的字段:

    find _file no-lock where _file-name = "activity".
    
    find _index no-lock where recid( _index ) = _file._prime-index no-error.
    
    if available _index then
      do:
        display _index._unique.
        for each _index-field no-lock where _index-field._index-recid = recid( _index ):
          find _field no-lock where recid( _field ) = _index-field._field-recid.
          display _field-name.
        end.
      end.
    

    【讨论】:

    • 这很好,这些表对我来说是可以访问的,而且看起来我只需要一些代码来转换为 sql / php。一旦我有机会通过测试运行它,我会回来更新。
    • 成功了。感谢汤姆的帮助。对于偶然发现这一点的其他人,需要注意的是 odbc 使用 rowid 而不是 recid( table )。附带说明一下,我编写的函数发现它的性能不太好(我想这与使用 rowid 有关),每个主键大约需要 50-80 毫秒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2018-02-14
    相关资源
    最近更新 更多