关于如何最好地在关系数据库中建模关系(我正在使用MySQL),我有一个问题:
我有一个实体“产品”,应该链接到一个或多个利益相关者。我用一个单独的表“涉众”(包含涉众的名称)和连接产品和涉众的链接表"Product2Stakeholder“来建模这种关系。
但是,我也希望指定每个产品的一个主要涉众。我在想,如果要这么做,我应该
谢谢。
发布于 2020-04-27 09:41:02
首先是一项公约建议。当您有多到多个解析器(在您的例子中是"Product2Stakeholder“)时,只需将表命名为ProductStakeholder。添加“2”是业余的,只会使您的表名更长。
您应该实现选项b,这总是允许您以相同的方式获得产品的涉众,方法是使用ProductStakeholder属性=1的条件或不使用isMainStakeholder属性的条件查询isMainStakeholder。
否则,您甚至在ProductStakeholder表中没有主涉众可用,这应该会告诉您这是一个错误。
在数据库中强制执行业务规则
要解决约束类型的问题,可以在insert之前和update触发器之前添加不允许产品有多个isMainStakeholder行的触发器。
尽管如此,您仍然需要编写某种类型的过程代码来添加或更改isMainStakeholder,如果您有这些类型的触发器,在它们保护您的同时,您还必须按照顺序处理更改:
发布于 2020-04-27 09:43:50
备选案文b并不确保只有一个“主要利益攸关方”。我认为在product2stakeholder表上创建一个函数索引/虚拟列是可能的,这样做可以减少维护工作量,但这缺乏透明度。(我故意不解释如何做到这一点,理由是如果需要解释,这将证明这不是正确的解决方案)。
我赞成备选方案A,但这确实是一个意见问题。
https://stackoverflow.com/questions/61455704
复制相似问题