当前位置:  开发笔记 > 编程语言 > 正文

精炼存储在SQLite中的数据 - 如何加入多个联系人?

如何解决《精炼存储在SQLite中的数据-如何加入多个联系人?》经验,为你挑选了0个好方法。

我在不同元素之间存储联系人.我想要消除某种类型的元素并存储由被删除元素互连的元素的新联系.

问题背景

想象一下这个问题.你有一个水分子与其他分子接触(如果接触是氢键,我的水周围可能有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查询,它只检索这六个想要的行.:-)
但是,欢迎任何其他想法.

最好保存关于谁是捐赠者(如果可能)的信息,但不是绝对必要的.

非常感谢所有读过这个问题的人.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有