我在不同元素之间存储联系人.我想要消除某种类型的元素并存储由被删除元素互连的元素的新联系.
想象一下这个问题.你有一个水分子与其他分子接触(如果接触是氢键,我的水周围可能有4个其他分子).如下图所示(A,B,C,D是其他一些原子,点表示接触).
A B | | H H . . O / \ H H . . C D
我有关于所有点的信息,我需要消除中心的水并创建描述AC,AD,AB,BC,BD和CD的接触的记录.
目前,我在数据库中有以下结构:
表atoms
:
"id" integer PRIMARY KEY,
"amino" char(3) NOT NULL,
(HOH代表水或其他价值)
标识原子的其他列
表contacts
:
"acceptor_id" integer NOT NULL,
(原子靠近我的氢,这里是C或D)
"donor_id" integer NOT NULL,
(这里是A或B)
"directness" char(1) NOT NULL,
(这应该是D代表直接而W代表水介导)
关于联系人的其他列,例如距离
编辑:如何看待前面描述的案例中的数据.
atoms
:
id|atom|amino 1 | O | HOH 2 | N | ARG <- atom A from image 3 | S | CYS <- B 4 | O | SER <- C 5 | N | ARG <- D
contacts
:
donor_id|acceptor_id|directness 1 4 D 1 5 D 2 1 D 3 1 D
我需要从中做出
contacts
:
donor_id|acceptor_id|directness 3 4 W <- B-C 3 5 W <- B-D 2 4 W <- A-C 2 5 W <- A-D 2 3 X <- A-B (These last two rows are escaping me, 4 5 X <- C-D there could be also row D-C, but not both C-D and D-C. A char 'X' could be used to mark "no donor/acceptor")
现在,我正在浏览所有的联系人donor.amino = "HOH"
.在此示例的情况下,这将选择从C和D接触对于每个这些选择的联系人的,我查找具有相同触头acceptor_id
由于是donor_id
在当前选定的接触.根据这些信息,我创建了新的联系人.最后,我删除了HOH的所有联系人.
这样,我显然无法创建CD和AB联系人(其他4个都可以).
如果我尝试类似的方法 - 尝试找到具有相同donor_id的两个联系人,我最终会得到重复的联系人(CD和DC).
我正在梦想一些长一页的SQL查询,它只检索这六个想要的行.:-)
但是,欢迎任何其他想法.
最好保存关于谁是捐赠者(如果可能)的信息,但不是绝对必要的.
非常感谢所有读过这个问题的人.