当上游 table 中的许多条目对下游 table 中的一个条目时指定 table 依赖关系

Specifying table dependency when many entries in upstream table for one entry in downstream table

我想创建一个数据联合计算 table,它依赖于来自上游 table 的多个条目(大约 20 个)。我知道可以创建一个 table,它依赖于来自上游 table 的多个条目,使用 .proj 方法重命名主键,但我认为这在我的情况下不起作用,因为 datajoint将允许的主键数量限制在 16 左右。是否有任何方法可以指定上游 table 和下游 table 之间的正式依赖关系,这样做需要在主键中拥有超过允许数量的主键下游 table?在此先感谢您的帮助。

子 table 中的一个外键总是引用父 table 中的一个条目。如果子条目总是恰好引用父条目中的两个条目,那么您可以拥有一对外键,重命名外键属性。如果您必须引用任意子集,那么您将需要建模一个额外的 master-part 关系。

让我用 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 
    """

现在假设我们执行配对记录,我们刺激一个细胞并从另一个细胞记录。该记录恰好依赖于两个单元格,并且依赖关系是有序的:有单元格 #1 和单元格 #2。在这种情况下,我们可以有两个单独的外键。

@schema
class PairedRecording(dj.Manual):
    definition = """
    -> Cell.proj(presynaptic = 'cell')
    -> Cell.proj(postsynaptic = 'cell')
    """

但想象一下,您同时修补多个单元格并从中记录。我们将这组同时修补的单元格称为 'cohort' 并将其定义为 master-part 关系。

@schema
class Cohort(dj.Manual):
    definition = """
    -> Slice
    cohort : int
    """

    class Cell(dj.Part):
        definition = """
        -> master
        -> Cell
        """

master-part 关系 Cohort/Cohort.Cell 意味着任何同类群组始终作为单个事务与其所有单元一起创建和销毁。无法将细胞添加到现有群组或从中移除。对 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 table 以同时指定群组中每个单元格的录制频道。频道号在队列中必须是唯一的,所以我们必须添加唯一索引。

@schema
class Cohort(dj.Manual):
    definition = """
    -> Slice
    cohort : int
    """

    class Cell(dj.Part):
        definition = """
        -> master
        -> Cell
        ---
        channel : int
        unique index (slice, cohort, channel)
        """

数据连接愉快!