【发布时间】:2021-08-30 19:04:39
【问题描述】:
我找不到我正在尝试做的事情的术语,这可能会限制我查找与我的问题相关的信息的能力。
我正在尝试将产品标识符和产品处理代码(图中的橙色表)与基于流程类型的每个流程代码有效的产品类型和子类型验证相关联。重要的是,每个产品标识符都与产品类型相关(参见ProductIdentifier 表),每个流程代码与流程类型相关(参见ProcessCode 表)。我将下表中的属性最小化为我的问题所必需的属性。
在上面的例子中,当我INSERT INTORunProcessTypeOne 表时,我需要验证RoleOneProductIdentifier 的ProductCode 是否存在于ProductTypeTwo 中。同样,我需要验证RoleTwoProductIdentifier 的ProductCode 是否存在于ProductSubtypeOne 中。
当然,我可以使用在运行SELECT 后插入RunProcessTypeOne 表的存储过程来检查相关表中是否存在与RoleOneProductIdentifier 和RoleTwoProductIdentifier 相关的ProductCode。这似乎不是最优的,因为我必须为每个INSERT 运行三个SELECTs。另外,ProcessTypes 和 ProductCodes 之间的关系只能在存储过程中知道,而不是通过表本身之间建立的关系(外键)知道,这似乎很可疑。
这种方法有替代方案吗?是否有处理此类验证的标准,您需要根据实体类型之间的关系(例如 ProductTypeTwo 和 ProcessTypeOne 之间的关系)验证实体类型的单个实例(例如 ProductIdentifiers)?
如果更多详细信息有帮助:ProductCode 和 ProcessCode 之间的关系是多对多的,但在每个流程中都有定义产品角色的规则,并且只有某些产品类型或子类型可以满足这些角色。 ProductTypeOne 可能包含定义特定类型产品的属性,例如颜色或形状。 ProductIdentifier 包括许多已生产的ProductCode。 ProcessCode 包括放在机器上进行处理的设置。 ProductType 通过ProductCode 确定ProductIdentifier 是否对特定的ProcessType 有效。单个ProcessCodes 不会区分有效的ProducIdentifiers,只有与ProcessCode 相关的ProcessType 会区分。
【问题讨论】:
-
您是否研究过条件约束?对我来说听起来像这个问题。 stackoverflow.com/questions/44867149/…
-
为什么
ProductCode和ProductIdentifier两者都有//它们有什么区别?为什么表RunProcessTypeOne使用ProductIdentifier作为FK/不能使用ProductCode?在我看来ProductCode是关联产品信息的主要方式(?),而ProductIdentifiers 是某种“替代键”(?)也许并非所有产品都有ProductIdentifier而ProductCode是一个稳定的密钥(?)然后RunProcessTypeOne应该有一个FK到ProductCodenotProductIdentifier. -
@AntC
ProductIdentifier包括ProductCode的各个实例。假设我为ProductCode=“jie530”的每个规格生产两个木块。这些木块中的每一个都有一个单独的ProductIdentifier,比如“123”和“456”。RunProcessTypeOne必须包含ProductIdentifier,因为每个ProductIdentifier都有唯一的值,例如日期、操作员、空气温度、重量。所有产品都有ProductCode和ProductIdentifier。