0

我想创建一个依赖于上游表中的多个条目(大约 20 个)的数据联合计算表。我知道可以使用 .proj 方法创建一个依赖于上游表中的多个条目的表来重命名主键,但我认为这不适用于我的情况,因为 datajoint 限制了允许的主键数量16. 有什么方法可以指定上游表和下游表之间的正式依赖关系,因为这样做需要下游表中的主键数量超过允许的数量?提前感谢您的帮助。

4

1 回答 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 回答