Agile PLM 表结构说明

公共说明

数据库使用(重要)

  • 直连数据库存在风险,使用时请谨慎!笔者曾今亲身体验,某个SQL写的有性能问题导致数据库服务器CPU占用率90%+,从而导致PLM服务不可用。
  • 仅建议复杂查询直连数据库,简单查询优先使用AgileApi。对于复杂查询,建议公司内部有擅长数据库性能优化的人员再考虑直连数据库。功能设计和上线前请进行充分测试。避免出现性能问题后影响Agile运行。
  • 涉及增删改的功能强烈不建议直接操作数据库,对于Agile表结构并没有完全摸透,可能会产生脏数据,同时即使改了Agile存在缓存也不会立即生效。
  • Agile有动态配置字段功能,直连数据库进行查询后,虽然查询速度提升,但字段将固化,后续存在维护成本。
  • 建议使用其他用户连接PLM数据库,其他用户可授予其AgilePLM_ROLE角色,不要直接使用agile用户。
  • 第三方系统如果要访问PLM数据建议通过接口而不是直连PLM数据库。性能风险是原因之一。还有就是安全风险,提供了数据库用户,可以查询表内的任何数据。也可以对表进行其他操作。
  • 未经授权和批准请不要修改或泄漏agile用户密码。agile用户密码修改之后,如果其他配套设置没有对应修改,Agile系统将无法使用。

时区问题

由于PLM是一个跨语言跨国家的软件,需要兼容各个国家的不同时区。PLM数据库中存的所有时间字段都是零时区时间。查询显示时需要根据当地时区换算。

例如:我们国家属于东8区,取出来之后要+8小时才是实际时间。参考sql如下:

--变更发布时间查询
select C.CHANGE_NUMBER, c.release_date + 8/24 from agile.change c

Agile表结构

数据表

物料

表说明

-- 物料表
select * from agile.item;

-- 物料视图
select * from agile.ITEM_query;
select * from agile.ITEM_P2_QUERY;
select * from agile.ITEM_P2P3_QUERY;
select * from agile.ITEM_P2P3_QUERY_ALL_REV;

-- 物料历史记录
select i.item_number,t.* 
from ITEM_HISTORY t 
inner join ITEM i on t.item = i.id
where I.ITEM_NUMBER like '03.08.%' 

表字段说明

item_number 物料编码

CLASS 一级分类

SUBCLASS 二级分类

DESCRIPTION 描述(物料名称)

DEFAULT_CHANGE 最新的变更单ID

RELEASE_TYPE 生命周期ID

REV_NUMBER 版本号

BOM

表说明:

参考 ItemBom.map.xml

SELECT * FROM agile.bom b;

-- 工位表(bom字段关联bom表id字段,一个工位一行记录,可能存在超过4000的问题)
select * from REFDESIG t where bom = 72624583;

-- 大文本字段存储表,bom注释(id为物料id,row_id为bom的id)
select * from AGILE_FLEX t where t.text in ('sjj12','sjj');

-- PLM物料Bom查询(只查一层)不带工位, BOM注释
SELECT  b.*, ic.DESCRIPTION
,l.value AS sub_class_text
,ls.value AS life_cycle
,ip.ITEM_NUMBER AS parent_item_number
,lp.value as parent_life_cycle
FROM agile.bom b
INNER JOIN agile.ITEM_QUERY ip ON b.item = ip.id
INNER JOIN agile.ITEM_QUERY ic ON b.component = ic.id
left JOIN agile.LANGTABLE lp ON ip.RELEASE_TYPE = lp.id AND lp.type = 4450 AND lp.langid = 4
INNER JOIN agile.LANGTABLE l ON ic.SUBCLASS = l.id AND l.type = 4450 AND l.langid = 4
INNER JOIN agile.LANGTABLE ls ON ic.RELEASE_TYPE = ls.id AND ls.type = 4450 AND ls.langid = 4
WHERE NVL(b.CHANGE_OUT, 0) = 0 AND SUBSTR(b.FLAGS, 5, 1) = 1
and ls.value not in ('报废','停产','退市')
and lp.value in ('报废','停产','退市')
and ip.ITEM_NUMBER like '02.88.000026'
and ic.ITEM_NUMBER like '03.%'

表字段说明

ITEM 父物料ID

COMPONENT 子物料ID

ITEM_NUMBER 子物料编码

QUANTITY:子料用量,文本字段。可支持分数,例如:1/6

CHANGE_IN 新增时的变更单ID

CHANGE_OUT:删除时的变更单ID

PRIOR_BOM:如果不为空,代表该行数据变更了另一行数据,值为另一行数据ID。

FIND_NUMBER:查找编号,目前没用起来.

FLAGS,bom分录状态(第5位数为1代表有效)

活动

class表示大类(关口和活动), subclass表示小类(关口, 任务, 计划, 阶段)

subclass=18027:计划(项目),

subclass=18028:阶段,

subclass=18029:任务,

subclass=18401:关口,

业务关系:
计划(项目)包含阶段, 阶段包含任务和关口, 某些任务完成以后, 关口才能打开, 才能进行下一阶段的任务
PARENT_ID:上一层对象的id,比如任务的parent_id会指向阶段,阶段的parent_id指向计划.
ROOT_ID:最上层对象的id,也就是计划的id
status:状态信息-状态。
值的具体含义:(每个环境可能不一样,建议使用statustype)
18516 未开始
18517 进程中
18518 完成
18519 已取消
18540 已取消
18539 已打开
18537 已关闭
18538 审阅中

价格

表说明

-- 价格主表 
SELECT * FROM agile.PRICE p;

-- 价格子行
SELECT * FROM agile.priceline pl;

PRICE:对应价格

PRICELINE:对应价格的定价页签数据。也就是价格里面一行,即阶梯价格。当价格新建之后会有一条很多字段都是null与之对应,往定价中新增记录之后会是2条数据。

价格和BOM类似也存在版本管理,在流程中也能对价格进行增删改操作,流程走到发布节点才会生效.

流程中未生效的数据也是存在PRICELINE表的.

PRICE表结构

price_type:价格类型。1:代表量产价,0:为样品价;

price_number:价格编号。相当于物料编码。

owner:创建人。

supplier:对应的供应商。

item:对应的物料。制造商部件型价格这个字段为空。

mfr_part:对应的制造商部件。物料型价格这个为空。

default_change:默认的最新的价格变更

delete_flag:删除标识。0:代表未删除。

flags:状态标识。刚新建时第三位是1。加入变更单之后第4位变为1

part_number:物料型价格这个字段记录物料编码;制造商部件价格这个字段记录:制造商名称::制造商部件编号

PRICELINE表结构

price:外键,关联price表ID。

change_in:价格行新增的表更单id,如果是0代表走变更之前就新增好的。如果是空则代表无效数据。

change_out:只要有值代表该行已被删除且流程已发布。流程如果还未发布,则依然会是0。删除别人的行in和out相等。

prior_row:如果该行修改了另一个行,这里记录被操作行id。

flags:状态标识。在变更中新增全为0,变更之前新增第4和第5位为1。不受PCO影响。

quantity:数量

effective_from_date:生效开始日期

effective_end_date:生效结束日期

currency_code:货币代码

material_price:材料价格

变更

表说明:

-- 变更 2473549:EcoBOM
select * from agile.change c where c.CHANGE_NUMBER in ('C0095253');

--变更受影响物件查询
SELECT c.change_number, i.*
FROM AGILE.REV R 
INNER JOIN AGILE.ITEM I ON R.ITEM = I.ID 
INNER JOIN AGILE.CHANGE C ON R.CHANGE = C.ID
INNER JOIN agile.LANGTABLE l on c.SUBCLASS = l.id and l.type = 4450 and l.langid = 4
WHERE I.CLASS = 10000 AND C.CREATE_DATE > '2018-01-01'
and l.value in ('自制件料号申请与BOM发布流程','ECO-BOM变更流程')
供应商

表说明:

--供应商
select * from ORGANIZATION where org_number in ('RM.00652');
制造商

MANUFACTURERS:制造商
MANU_PARTS:制造商部件
MANU_BY:制造商和部件关系表

--制造商
select * from agile.MANUFACTURERS b where b.name = '昆晶冷片(深圳)电子有限公司';

--制造商部件
select * from agile.MANU_PARTS p where p.PART_NUMBER in ('1N5242B');

--物料和部件关联关系 
select * from agile.MANU_BY b where B.MANU_PART != 0;
产品服务请求

表说明:

--缺陷
select * from PSR t where t.status = 2477843;
文件

Attachment:附件表

Floder:文件夹表

所有数据

agile_objects对象视图,仅有CLASS, SUBCLASS, KEY_FIELD, DESCRIPTION

--大部分数据对象表,但仅有很少字段
select * from agile_objects;
历史记录

EVENT_HISTORY:事件历史表

前文提到的:

CHANGE_HISTORY:变更历史表

ITEM_HISTORY:物件历史表

公共表

第二页,第三页

PLM中大部分数据对象都会有第二页和第三页。

第二页中存储的是分类中一二级分类的公共字段。对应的表是PAGE_TWO

第三页中存储的是三级分类中特殊字段。对应的表是PAGE_THREE

第二页和第三页跟对象表的关联方式,根据对象表的ID和Class字段去第二页,第三页表中做关联查询。例如:

--第二页
select * from agile.PAGE_TWO t2;
--第三页
select * from agile.PAGE_THREE t2;
--物件关联第二页
select * from item i
inner join page_two p2 on i.id=p2.id and i.class = p2.class 

PLM中很多常用对象的第二页,第三页信息已经做了视图,可以直接用视图来查询

每个字段对应的含义或名称请结合PLM管理控制台查询。

大文本字段

对于varchar2 4000以内的内容直接存储在第二页和第三页。但如果超过4000则是存在下面的表中。

-- 大文本存储表,bom注释(id为物料id,row_id为bom的id)
select * from AGILE_FLEX t 
inner join bom b on t.row_id = b.id and t.id = b.item 
where t.text in ('sjj2','sjj');
多列表

多列表选择的值数量比较小时是以",id1,id2,id3,"存储在第二页和第三页中的。但如果超过一定数量这个字段会变成“-1”然后需要从msatt表查询。

管理配置

列表

listname:列表表

Listentry:列表项

列表项id:entryid

列表项值:entryvalue

列表项之间父子关系:parent_entry

列表项分类:parentid

列表项分类id可以去后台管理系统的“设置-数据设置-列表”中查询

--列表定义表,层叠列表用parent_list链接父子列表
select * from agile.LISTNAME WHERE name like '%物料组%';

--列表子行 父子记录通过parent_entry关联,parentid用于区分不同的列表项
select * from agile.LISTENTRY l where l.parentid in (2477261) and langid in (0,4);

--修复生命周期专用SQL display值应该为0.
select * from agile.listname where id = 301;
update listname set display = 0 where id = 301;

--生命周期查询
select ip.*,lp.value 
from agile.ITEM_QUERY ip
INNER JOIN agile.LANGTABLE lp 
ON ip.RELEASE_TYPE = lp.id AND lp.type = 4450 AND lp.langid = 4
用户

表说明:

-- plm用户表
select * from agile.AGILEUSER where loginid = 'zhangsan'

-- 用户组
select * from agile.user_group where id = 6039858
货币转换

CONVERSION:货比转换配置

-- 转换(货币)
select * from agile.CONVERSION c where c.CONV_EFFECTIVE_TO_DATE is null;
系统配置

表说明:

-- 查询PLM进程扩展
select * from PROPERTYTABLE p 
inner join NODETABLE n on p.parentid = n.id 
where n.PARENTID = 10025 and p.value like '%PCBCreateItem%'

-- 查询PLM事件程序
select * from agile.PROPERTYTABLE p 
inner join agile.NODETABLE n on p.parentid = n.id  and propertyid = 885 
where n.PARENTID = 2000011631 and p.value like '%CheckSCSupplier%'
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值