Teamcenter学习平台正式上线(https://www.plmvision.top),安装配置实施开发源码仓库,全套学习教材!关注公众号发送“二维码“咨询加入!
如果你是一个习惯了 Spring Boot + MyBatis 开发电商系统的程序员,初看 Teamcenter 的底层架构,你可能会感到极其不适,甚至认为是“反人类”的。
为什么我看不到直观的 select * from users? 为什么数据库里会有那么多空字段? 为什么一个简单的 ID 是一串乱码般的字符?
一、 POM 的诞生:为什么 PLM 不能像电商系统那样写 SQL?
继承深度极深 :一个 Bolt(螺栓)继承自 Fastener(紧固件),继承自 Item(零部件),继承自 WorkspaceObject,继承自 POM_object。动态扩展 :客户买了软件后,今天想给螺栓加个“材质”属性,明天想给图纸加个“审批人”属性。版本与关系爆炸 :一个零件有几十个版本,每个版本关联几十张图纸、几百个变更单。
对上(ITK/Java) :它提供纯粹的面向对象接口(loadObject, save, refresh)。对下(Oracle/SQL Server) :它负责把这些对象“翻译”成 SQL 语句。

如果 MyCarPart 的属性很少,直接把这些字段加到 Item 所在的物理表中(通过增加列)。 利用 Discriminator(鉴别器) 字段来区分这一行数据到底是 Item 还是 MyCarPart。
三、 PUID 的设计艺术:为什么不用自增 ID?
系统 A 的 ID=100 是“张三”,系统 B 的 ID=100 是“李四”。当要把两个系统的数据合并时,ID 冲突能让人崩溃。
PUID 的解剖学(逻辑结构):
Site ID(站点标识) :这是最核心的。每个 TC 数据库实例安装时都会分配一个唯一的 Site ID(比如 -18324823)。Timestamp/Sequence(时间戳/序列) :保证同一秒内的唯一性。Tag(对象标签) :某种内部计数。
全球唯一 :只要 Site ID 不同,全球任何两个 TC 站点生成的 PUID 永远不会重复。离线生成 :生成 PUID 不需要锁数据库表(不需要 select max(id)),应用层算法直接算出来,性能极高。位置透明 :看到 PUID,系统就知道这个数据是“本地生长的”还是“外地同步过来的”。
四、 偷师要点:我们能学到什么?
1. 不要在业务代码里写 SQL Join
坏处 :数据库 Schema 变更,代码全崩。TC 的做法 :POM 层隔离变化。业务层说 item.getBOMView(),POM 层去搞定那复杂的关联查询,甚至利用Object Cache(对象缓存) 来避免查库。
2. “强类型、弱关联”的底层存储
数据库层(弱关联) :我不强制检查这个 ID 对应的那行数据是否存在(为了性能和数据导入的灵活性,以及允许“虚线”关联)。应用层(强类型) :POM 加载对象时,会严格检查类型和完整性。