我正在使用我的Oracle DB进行问题设计。 我有一些样本(样本有唯一的名称),每个样本都有一些 Locus (Locus有唯一的名称)。在每个Locus中,有一串 Allel 值,如下例所示:
+--------+------------+----------+
|Name | Locus | Allel |
+--------+------------+----------+
|F70 | DX61 | 10,11,12 |
|F70 | DX60 | 10,12 |
|E70 | DX61 | 10,12 |
|E70 | DX60 | 10,11,12 |
|S70 | DX61 | 11,13 |
我需要做的是:
当我从用户(SampleName,LocusName(s),Allel(s))获取样本时,我需要找到与我的输入值匹配的Samples,匹配意味着:Allel值之间没有区别相应的基因座或甚至它们在1个基因座中是不同的,它仍然是匹配的。 如果2个或更多个基因座具有不同的值,我需要找到它们之间的相似性百分比。 例如: 如果输入是:
+--------+------------+----------+
|Name | Locus | Allel |
+--------+------------+----------+
|D70 | DX61 | 10,11,12 |
|D70 | DX60 | 10,12 |
F70是一场比赛。 E70仍然匹配,因为它与仅在一个基因座中的输入不同。 S70不匹配,但现在我必须计算Allels值之间的相似性。 S70没有Locus DX60,它在Locus DX61的Allel中有一个相似的值,因此相似度为20%(DX60中有2个Allels缺失,因为它没有它,DX61中只有1个Allel存在,所以1个5存在)。 让我感到困惑的是,轨迹的顺序可以是任何东西。想象一下,如果我想找到1个输入的所有匹配项,我必须考虑具有精确基因座的所有样本并且具有确切的Allel值然后我必须找到具有所有基因座和等位基因的所有样本在输入中有它们可能在1个基因座中不匹配,甚至没有该基因座。 再说一点,Allel值用逗号分隔,它们存储为Varchar,因为Allel值不仅限于数字,也有像O1或L2这样的值。 我会澄清你的任何问题,但请尽力帮助我解决这个问题。 如何设计查询以查找这些值?我应该在程序端还是服务器端执行所有操作?