Auferlegen einer Eindeutigkeitsbeschränkung von Spaltenwerten zwischen mehreren Tabellen in SQLModelPython

Python-Programme
Guest
 Auferlegen einer Eindeutigkeitsbeschränkung von Spaltenwerten zwischen mehreren Tabellen in SQLModel

Post by Guest »

Entschuldigung, wenn diese Frage an anderer Stelle beantwortet wurde: Ich hatte kein Glück bei der Suche. Ich bin auch ein SQL-Neuling, daher hoffe ich, dass die Antwort auf meine Frage nicht zu elementar ist.
Ich erstelle eine Datenbank, um experimentelle Parameter für unser Labor zu speichern, und das tue ich auch Dies geschieht mithilfe von SQLModel. In einem einfachen Beispiel meiner Frage habe ich zwei Tabellen, WaveformA und WaveformB:

Code: Select all

from sqlmodel import Field, SQLModel

#from sqlmodel import  Column, Relationship, CheckConstraint, Integer, UniqueConstraint
# from sqlalchemy.ext.hybrid import hybrid_property

class WaveformA(SQLModel, table=True):
__tablename__ = "waveforms_a"

id: int = Field(
primary_key=True,
)
name: str = Field(
unique=True,
description="Unique name to identify a waveform of type A"
)
# other columns particular to waveforms of type A, that may not be present in Waveform B

def __repr__(self):
return f"Waveform A with id {self.id} and name {self.name}"

class WaveformB(SQLModel, table=True):
__tablename__ = "waveforms_b"

id: int = Field(
primary_key=True,
)
name: str = Field(
unique=True,
description="Unique name to identify a waveform of type B"
)
# other columns particular to waveforms of type B, that may not be present in Waveform A

def __repr__(self):
return f"Waveform B with id {self.id} and name {self.name}"
Ich möchte sowohl WaveformA als auch WaveformB gemeinsam auf Tabellenebene eine Einschränkung auferlegen, um die Eindeutigkeit zwischen der Vereinigung aller in diesen beiden Tabellen vorkommenden Namenswerte sicherzustellen.
Der Grund, warum ich das tun möchte, ist, dass alle Zeilen in WaveformA in eine mathematische Funktion im Backend eingespeist werden und alle Zeilen in WaveformB in eine andere mathematische Funktion im Backend eingespeist werden , wenn ein Experiment in die Warteschlange gestellt wird auf unserer Hardware. Abgesehen von der Namensspalte jeder Tabelle haben WaveformA und WaveformB im Allgemeinen unterschiedliche Spalten, da ihre Funktionen unterschiedlich sind (z. B. kann WaveformA eine Spalte „Standardabweichung“ und nicht „Verstärkung“ haben, während WaveformB „Verstärkung“, aber keine „Standardabweichung“ hat). ), daher ist es sinnvoll, die Wellenformen in zwei Tabellen aufzuteilen. Nachdem ich jedoch alle Zeilen beider Tabellen gelesen, die Spaltenwerte in die entsprechende Funktion eingegeben und die Ausgaben jeder Funktion für jede Tabelle erfasst habe, muss ich die Ergebnisse für beide Tabellen in einem einzigen Python-Wörterbuch mit der Namensspalte kombinieren Werte als Schlüssel und die Ausgaben dieser Funktionen als entsprechende Werte. Dies ist das Eingabe-Python-Wörterbuch, das die Hardware benötigt, und natürlich müssen die Schlüssel alle eindeutig sein, daher ist die Eindeutigkeit der Namensspalte zwischen mehreren Tabellen erforderlich.
Es ist trivial, Eindeutigkeit durchzusetzen für eine Spalte in einer einzelnen Tabelle (der Parameter „unique=True“ in den Field-Instanzen). Ich habe auch versucht, mich mit UniqueConstraint zu befassen und einen zu _table_args_ jeder Wellenform hinzuzufügen, aber dies scheint nur beim Erstellen von Eindeutigkeitsbeschränkungen zwischen mehreren Spalten in derselben Tabelle nützlich zu sein, nicht bei Spalten zwischen Tabellen.
Python selbst würde einen Fehler in meiner Kompilierungsfunktion zurückgeben, die das oben genannte Wörterbuch erstellt, sodass dieser Fehler nicht übersehen würde. Aber ich möchte eine solche Einschränkung auferlegen, damit kein Benutzer in unserem Labor versehentlich den Namen einer vorhandenen Wellenformzeile dupliziert (um die Integrität unserer Datenbank sicherzustellen).
Ich bin mir nicht sicher, ob solche Einschränkungen sogar in SQL selbst möglich sind, daher wäre ich für jede Hilfe dankbar!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post