我想创建一个依赖于上游表中的多个条目(大约 20 个)的数据联合计算表。我知道可以使用 .proj 方法创建一个依赖于上游表中的多个条目的表来重命名主键,但我认为这不适用于我的情况,因为 datajoint 限制了允许的主键数量16. 有什么方法可以指定上游表和下游表之间的正式依赖关系,因为这样做需要下游表中的主键数量超过允许的数量?提前感谢您的帮助。
问问题
21 次
1 回答
2
子表中的外键始终引用父表中的一个条目。如果子条目总是恰好引用父条目中的两个条目,那么您可以有一对外键,重命名外键属性。如果您必须引用任意子集,则需要对附加的主零件关系建模。
让我用 Python 中的神经科学示例来说明。想象一下,您正在从大脑切片中的细胞进行记录。让我们建模:
import datajoint as dj
schema = dj.Schema('multipatch_study')
@schema
class Slice(dj.Manual):
definition = """
slice : int
---
slice_description : varchar(1000)
"""
@schema
class Cell(dj.Manual):
definition = """
-> Slice
cell : int
"""
现在想象我们执行配对记录,我们刺激一个细胞并从另一个细胞记录。该记录完全依赖于两个单元,并且依赖关系是有序的:有 Cell #1 和 Cell #2。在这种情况下,我们可以有两个单独的外键。
@schema
class PairedRecording(dj.Manual):
definition = """
-> Cell.proj(presynaptic = 'cell')
-> Cell.proj(postsynaptic = 'cell')
"""
但是现在想象一下,您同时修补了多个单元格并从中记录。让我们将这组同时修补的单元称为“队列”,并将其定义为主部件关系。
@schema
class Cohort(dj.Manual):
definition = """
-> Slice
cohort : int
"""
class Cell(dj.Part):
definition = """
-> master
-> Cell
"""
master-part 关系Cohort
/Cohort.Cell
意味着任何 Cohort 总是作为单个事务与其所有单元一起创建和销毁。无法将单元格添加到现有同类群组或从现有群组中删除。一个依赖Cohort
等同于对它所代表的整个单元组的依赖。
当您设计分析导入记录的下一步时,您只需指向Cohort
。
@schema
class Multipatch(dj.Imported):
definition = """
-> Cohort
---
current_clamp : longblob # (mV) (channels x time)
"""
那么连通性分析可以参考多面体记录:
@schema
class Connectivity(dj.Computed):
definition = """
-> Multipatch
---
connectivity : longblob # connectivity matrix (channels x channels)
"""
映射通道
作为奖励,让我们修改Cohort
表格以同时指定群组中每个单元格的记录通道。频道号在同类群组中必须是唯一的,因此我们必须添加唯一索引。
@schema
class Cohort(dj.Manual):
definition = """
-> Slice
cohort : int
"""
class Cell(dj.Part):
definition = """
-> master
-> Cell
---
channel : int
unique index (slice, cohort, channel)
"""
快乐的数据连接!
于 2022-02-16T15:29:21.723 回答