Oracle SQL Data Modeler逻辑转关系模型自动生成实体ID的问题求助
我之前也踩过Oracle SQL Data Modeler这个自动生成不必要ID的坑,结合你描述的情况(强实体已有域保障唯一的主键,却仍生成如Activity_ID这类属性),大概率是以下几个细节没配置对,给你一步步排查解决:
确认逻辑模型中实体主键的正确标记
你以为设了主键的属性,可能只是加了唯一约束,没被工具识别为主键。打开逻辑模型的目标实体,进入Attributes标签,检查那个基于域的属性的Key Type是不是设置为Primary——只有明确标记为Primary,转换时工具才会用它作为关系模型的主键,而不是自动生成新ID。检查域的主键可用性配置
即使域保障唯一性,也需要确保它允许被用作主键。进入Domain Manager,找到对应域,切换到General标签,确认Primary Key选项已勾选,这样工具才会认可基于该域的属性作为实体主键。调整逻辑转关系的转换规则
工具默认可能开启了为强实体生成代理键的选项。操作路径:点击菜单栏的Tools > Preferences,找到Data Modeler > Logical to Relational Transform,查看是否有类似Generate Surrogate Key for Strong Entities的选项,把它取消勾选——这是最常见的导致自动生成ID的原因。排查实体关系的异常依赖
如果实体和其他实体的关系定义有误(比如错误的依赖方向),工具可能误判它不是强实体,从而触发自动生成ID的逻辑。去逻辑模型的Relationships标签下,检查该实体的所有关联,确保关系类型和依赖都是正确的。
做完以上调整后,先保存逻辑模型,然后右键逻辑模型选择Engineer to Relational Model重新转换,应该就能解决自动生成冗余ID的问题了。
内容的提问来源于stack exchange,提问作者Roy

