繁体   English   中英

实现关系数据模型:此表的约束是什么?

[英]Implementing a relational data model: what are the constraints for this table?

我正在尝试提出一个关系模型和数据库实现,但是一直遇到这个问题。 但是我什至不知道该怎么称呼! 改进标题的建议将不胜感激。

我试图将问题归结为基本问题。


简化示例:

这是MySQLWorkbench图:

MySQLWorkbench数据模型


如您所见, 问题全部出在Atom table上

预期目标概述:

  • 我需要存储蛋白质特定原子的数据
  • 我可能有一些原子的数据,或者没有原子
  • 我不想插入垃圾数据-我想通过数据库约束来防止这种情况

我不确定的是:

  • 是否应该有一个Atom表-似乎Atom_refResidue之间的连接会生成蛋白质的所有原子-但我还需要存储有关原子的数据

问题概述:

  • 每个原子都需要一个残基,还有一个atom_ref
  • 但是由于残基与残渣参考关联,因此atom_ref只能是与之关联的(与残渣参考)之一
  • 不知道如何将残基的残渣参考与atomic_ref的残渣参考相匹配

到目前为止,我已经尝试过:

  • Atom_ref的pk添加到Atom的pk中-但那时Residue _ref可能与Residue不匹配
  • Residue.rr_name更改为pk的一部分-违反域语义

我知道这是对该问题的不好解释,我正在尝试找出如何更清楚地解释它! 非常欢迎提出改进建议!

如果我理解正确,那么您所追求的是(a)Atom和Residue的连接与(b)Atom_ref之间的包含依赖关系。 (即,必须将Atom中的所有原子名与在残基中为其定义的rr_name组合为有效组合,即必须出现在Atomref中)。

仅使用RI / FK的方法是在Atom中冗余地包含rr_name。 将FK从Atom扩展到Residue到所有三列。 这将确保您确保Atom中记录的rr_name与Residue中的信息保持一致。 但是,由于您现在已经在Atom中引入了rr_name,因此,您现在具有(通过FK原子名+从Atom到Atom_ref的rrname)确保Atom中记录的任何内容也与已声明的原子名相一致的方式(在atomref中)存在于所涉及的剩余引用中。

请注意,由于您刚刚降低了设计的NF级别,因此此“解决方案”使数据库更新变得更加困难(需要更多的冗余维护,从而有更多的违规可能性)。

这样做的另一种方法是保持设计不变,并通过对每个涉及的表进行适当的触发器来强制执行约束,在此情况下更新可能会导致违反业务规则。 也就是说,删除和更新Atom_ref(即导致有效组合消失的任何内容,该组合有效地存在于某处),更新(rr_name)在Residue上,并插入和更新Atom(即可能导致某些外观出现的任何内容)可能无效的组合)。

在蛋白质中,残基名称是否唯一? IE,您可以在Residue (p_id, rr_name)上创建唯一约束吗?

如果是这样,那么在Atom你可以取代r_indexrr_name ; (p_id,rr_name)Residue创建FK; 和创建上的FK (rr_name, atom_name)Atom_ref

编辑 :是的,我认为可能不会那么简单。 我认为您的第二个要点是正确的方向-但不要更改Residue的PK,只需在所有三列上创建一个新的唯一约束即可。 这两个约束甚至可以共享一个索引。 然后,您可以将rr_name添加到Atom ,并将其三列FK赋予Residue ,将其两列FK赋予Atom_ref

atom和atom_ref有什么区别? 查看您的表结构,似乎Residue_ref和Atom_ref将表示原子和残基之间的多对多关系。 (对不起,我从未参加过生化疗法,所以我可能缺少一些重要的东西)。

在特定残基的上下文中是否存在特定于Atom的数据? 如果答案是否定的,我会将Residue_ref和Atom_ref表缩减为一个表:atoms_residues,如下所示:

atoms_residue(r_index, atom_index)

这将确保原子表中的特定原子相对于残基表出现。

如果存在原子残基配对的上下文信息,我仍将创建上面的表,并考虑将上下文信息作为列添加到该表中。

关键是封装。 原子特定的数据应该在原子表中。 特定于残基的数据应在“残基”表中。 联接表表示两者之间的多对多关系,并且可以选择包含该关系唯一的任何信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM