首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >N-M模型与主行附加信息的关系

N-M模型与主行附加信息的关系
EN

Stack Overflow用户
提问于 2020-04-27 09:31:31
回答 2查看 39关注 0票数 0

关于如何最好地在关系数据库中建模关系(我正在使用MySQL),我有一个问题:

我有一个实体“产品”,应该链接到一个或多个利益相关者。我用一个单独的表“涉众”(包含涉众的名称)和连接产品和涉众的链接表"Product2Stakeholder“来建模这种关系。

但是,我也希望指定每个产品的一个主要涉众。我在想,如果要这么做,我应该

  • a)在“产品”表中定义一个外键字段,该字段包含“涉众”表中主要涉众的Id (例如,( "MainStakeholder"),或
  • b))在"Product2Stakeholder“表中添加一列,如果涉众是该产品的主要涉众(即布尔列"IsMainStakeholder")或
  • c),则使用完全不同的方法?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-27 09:41:02

首先是一项公约建议。当您有多到多个解析器(在您的例子中是"Product2Stakeholder“)时,只需将表命名为ProductStakeholder。添加“2”是业余的,只会使您的表名更长。

您应该实现选项b,这总是允许您以相同的方式获得产品的涉众,方法是使用ProductStakeholder属性=1的条件或不使用isMainStakeholder属性的条件查询isMainStakeholder。

否则,您甚至在ProductStakeholder表中没有主涉众可用,这应该会告诉您这是一个错误。

在数据库中强制执行业务规则

要解决约束类型的问题,可以在insert之前和update触发器之前添加不允许产品有多个isMainStakeholder行的触发器。

尽管如此,您仍然需要编写某种类型的过程代码来添加或更改isMainStakeholder,如果您有这些类型的触发器,在它们保护您的同时,您还必须按照顺序处理更改:

  1. 将当前的isMainStakeholder标志设置为0。
  2. 将其他涉众的新isMainStakeholder标志设置为1。
票数 0
EN

Stack Overflow用户

发布于 2020-04-27 09:43:50

备选案文b并不确保只有一个“主要利益攸关方”。我认为在product2stakeholder表上创建一个函数索引/虚拟列是可能的,这样做可以减少维护工作量,但这缺乏透明度。(我故意不解释如何做到这一点,理由是如果需要解释,这将证明这不是正确的解决方案)。

我赞成备选方案A,但这确实是一个意见问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61455704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档