zoukankan      html  css  js  c++  java
  • Table inheritance implementation changed

    在AX 2012 R2我们会发现有些table是在AOT里的,但是不存在实际的SQL Database.

    例如:CompanyInfo table.

    最终通过Extends property,可以发现CompanyInfo table 继承的是DirPartyTable.

    image

    1. 为了研究清楚table inheritance是如何工作的,我们可以从一个小小的query开始。
         CompanyInfo comp;
         select generateOnly forceLiterals comp;
         info(comp.getSQLStatement());

    我们可以得到T-SQL code:

    SELECT * FROM DIRPARTYTABLE T1
        WHERE ((T1.PARTITION=5637144576) AND (T1.INSTANCERELATIONTYPE IN (41) ))

    很显然,查询时比以前的版本简单得多,但可能不是那么清楚它是如何工作的。

    你可能会吃惊的是,该查询不使用任何表,仅仅是DirPartyTable。如果我列出了所有的fields,你可以发现在子表里定义的字段也是直接放在数据库里的DirPartyTable。

    但是如果所有的字段都在DirPartyTable,那子表(例OMInternalOrganization and CompanyInfo)的目的是什么? 答案是:子表真的不需要存在数据库那里,它们只存在于应用层作为独立的对象。

    2. 我们可以从T-SQL里看到AX里包含了哪些必须的子表。

    WHERE ((T1.PARTITION=5637144576) AND (T1.INSTANCERELATIONTYPE IN (41) ))

    Partition是AX 2012 R2的另一个新的feature,但是不影响table inheritance. 所以我们可以忽略它。重要的是InstanceRelationType,用来过滤记录的类型。

    Values in InstanceRelationType represents table IDs:

    2376

    OMInternalOrganization

    41

    CompanyInfo

    2377

    OMOperatingUnit

    5329

    OMTeam

    所有未在父表中定义的字段只make sense for specific types of records. 如果一个字段不存在一个特定的subtype, 那么它的value将会是NULL。

    image

    虽然table inheritance在AX里看起来是一样的实现方式,但是在数据库中有了显著的变化。

    注意:

    - 不要忽视 generateOnly keyword, 否则 getSQLStatement()将会返回一个空的字符串

    - avoid 复杂的继承,avoid too may tables joining

  • 相关阅读:
    什么是BFC?
    获取JavaScript对象的键值对两种方法的不同之处
    浏览器什么时候会引起reflow,应该怎样避免reflow的开销呢?
    用js实现跳转页面的方法
    停止animate动画和判断是否处于动画状态
    解决slideDown(),slideUp()鼠标来回进入的问题
    IE7浏览器绝对定位被下边元素遮挡问题解决办法
    前端开发面试要点及对策
    inline-block元素之间空白间距的解决办法
    web前端开发和移动前端开发的本质区别在哪里?
  • 原文地址:https://www.cnblogs.com/ivyliu/p/3737635.html
Copyright © 2011-2022 走看看