datajoint / datajoint-python

Relational data pipelines for the science lab
https://datajoint.com/docs
GNU Lesser General Public License v2.1
168 stars 84 forks source link

Add non-primary foreign key using alter() method #901

Open lfrank opened 3 years ago

lfrank commented 3 years ago

Feature Request

Problem

It would be helpful to be able to modify existing tables to have references to upstream tables. For example

@schema
class SpikeSortingParameters(dj.Manual):
    definition = """
    # Table for holding parameters for each spike sorting run
    -> SortGroup
    -> SpikeSorterParameters
    -> SortInterval
    ---
    -> SpikeSortingMetrics
    -> IntervalList
    import_path = '': varchar(200) # optional path to previous curated sorting output
    """

is our starting schema, and we'd like to add

-> SpikeSortingArtifactParameters

as a non-primary foreign key. We could have an empty set of parameters for already sorted data, and this would allow us to modify our current pipeline for future sortings.

Requirements

This would seem to require modifying the alter() method to allow initialization based on a particular foreign key.

Justification

This would provide useful additional flexibility when working on

guzman-raphael commented 3 years ago

Thanks for opening this @lfrank. Included this in the milestone for our next release.

khl02007 commented 1 year ago

@guzman-raphael It would be great if one could use alter to not only add but also to remove an existing foreign key from a table. Right now trying to do so leads to the same error: NotImplementedError: table.alter cannot alter foreign keys (yet).