From 0d73c1f17b381bef940a52c38831255c24c0e04c Mon Sep 17 00:00:00 2001 From: jross Date: Tue, 13 Jan 2026 16:13:15 -0700 Subject: [PATCH] feat: add unique constraint on SamplePtID in NMA_Chemistry_SampleInfo for FK integrity --- ...d8b982cd5d_add_nma_chemistry_lineage_relations.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/alembic/versions/95d8b982cd5d_add_nma_chemistry_lineage_relations.py b/alembic/versions/95d8b982cd5d_add_nma_chemistry_lineage_relations.py index c9f6a79e..c697231c 100644 --- a/alembic/versions/95d8b982cd5d_add_nma_chemistry_lineage_relations.py +++ b/alembic/versions/95d8b982cd5d_add_nma_chemistry_lineage_relations.py @@ -50,6 +50,18 @@ def upgrade() -> None: ondelete="CASCADE", ) + # Ensure SamplePtID is uniquely constrained for downstream FK usage. + pk = inspector.get_pk_constraint("NMA_Chemistry_SampleInfo") + pk_columns = pk.get("constrained_columns") or [] + unique_constraints = inspector.get_unique_constraints("NMA_Chemistry_SampleInfo") + unique_columns = {tuple(uc.get("column_names") or []) for uc in unique_constraints} + if pk_columns != ["SamplePtID"] and ("SamplePtID",) not in unique_columns: + op.create_unique_constraint( + "NMA_Chemistry_SampleInfo_SamplePtID_key", + "NMA_Chemistry_SampleInfo", + ["SamplePtID"], + ) + # Create NMA_MinorTraceChemistry table op.create_table( "NMA_MinorTraceChemistry",