数据库表的字段之间,存在业务关系;
也就是说数据表之间因为这个字段,而存在关联关系
这些关系包括:
外键、一对一、一对多、多对多
外键:数据表之间最常见的关联关系。用一个字段关联另外一个表。
在MisShop的表达式体系中,可以支持无限层级的外键字段
示例:"城市"表:有"国"字段,关联到"国家"表
"国家"表:有"洲"字段,关联到"大洲"表
table.城市.国:获取"城市"表中"国"这个字段的值
table.城市.国.名称:获取"城市"表所在"国家"的"名称"字段的值
table.城市.国.洲:获取"城市"表所在"国家"的"洲"字段的值
table.城市.国.洲.名称:获取"城市"表所在"国家"的所在"大洲"的"名称"字段的值
一对多:外键关联下的反向表达式。返回键值对类型。
在MisShop的表达式体系中,使用"外键表.OM_外键字段^表"来获取反向关联数据。
示例:
table.国家.OM_国^城市.名称:获取关联到这个国家的所有城市的名称,返回这些城市的主键(一般为id)和名称组成的键值对。
table.国家.OM_国^城市.名称.id:获取关联到这个国家的所有城市的id,返回这些城市的主键(一般为id)和id组成的键值对。
table.国家.OM_国^城市:OM表达式如果是最后一个表达式,则默认添加显示列,等同于 table.国家.OM_国^城市.名称。
table.国家.OM_国^城市.国.洲.名称:OM表达式后,可跟着任意的普通的外键表达式,同上面的外键关系。获取关联到这个国家的所有城市的所在国家所在大洲的名称。
一对一:外键关联(复合主键唯一字段)下的反向表达式。
外键关联,并且这个表存在复合主键,且此外键是复合主键的唯一字段,则认为外键表到此表为一对多关联。
示例:"商品详情"表:有"商品"字段,关联到"商品"表
且"商品详情"表,设置有复合主键,且复合主键只有一个字段,是"商品"。此时"商品"表到"商品详情"为一对一关联
table.商品.OO^商品详情.名称:获取唯一关联到"商品"表的"商品详情"表中"名称"这个字段的值。
table.商品.OO商品详情:OO表达式如果是最后一个表达式,则默认添加主键列。同table.商品.OO商品详情.id。
table.商品.OO^商品详情.商品.名称:OO表达式后,可跟着任意的普通的外键表达式,同上面的外键关系。获取唯一关联到"商品"表的"商品详情"的商品的"名称"这个字段的值。
多对多:两个表之间,任意一方都存在数据与另外一个表,是一对多关系。多对多表达式,返回键值对类型
示例:"用户"表:有"副角色组"字段,关联到"角色"表。字段类型为多对多。在设置字段类型为多对多的时候,系统会自动生成中间表。
table.用户.副角色组.名称:获取这个用户的所有副角色的名称,返回这些角色的主键(一般为id)和名称组成的键值对。
table.用户.副角色组.id:获取这个用户的所有副角色的名称,返回这些角色的主键(一般为id)和id组成的键值对。
table.用户.副角色组:多对多字段表达式如果是最后一个表达式,则默认添加显示列,等同于table.用户.副角色组.名称。
table.用户.副角色组.xxx:多对多字段后,可跟着任意的普通的外键表达式,同上面的外键关系。
1、FK/OO/OM/MM表达式,均可用在变量集的查询条件和单元格的query表达式中。
2、由于OM/MM的结果是键值对,所以如果用在过滤或者查询表达式中,其表示的意思为:包含这个查询条件的记录。其比较符为普通比较符前加上^。
3、在过滤或者查询表达式中,FK/OO/OM/MM,均可出现在任意层的表达式中,而不加以限制。
4、在值表达式中,OM/MM,只能出现在第一层表达式中,而FK/OO不做限制。
支持:table.用户.副角色组
不支持:table.用户.部门.主管.副角色组
5、OM/MM的返回数据类型为键值对,所以一般在显示值表达式中设置:Map.parse(value()).values(),用来显示值列表