Richtig verknüpfen mit kombinierten Schlüsseln

DaBe1812

Bekanntes Mitglied
Hi,
Ich habe eine Datenstruktur mit Zeitscheiben für Systeme.

Also nehmen wir System X mit PK 123ABC, also habe ich auf der Datenbank
PKVALIDVALUES
123ABC01.01.2022 13:46:11.123Werte 1
123ABC18.07.2022 16:15:45.987Werte 2

Also ist ID kombiniert aus PK und VALID. So weit ist das kein Problem.

Jetzt habe ich aber eine weitere Tabelle mit IP-Adressen. Jede Adresse soll in der Tabelle nur einmal vorkommen mit einer eindeutigen ID. Ein System kann mehrere IP-Adressen haben, aber jede IP-Adresse kann nur gleichzeitig an einem System zu einer Zeit hängen.

Wenn ich gerade das ganze zusammenschreibe fällt mir auf, wie kompliziert das gerade wird.

System1 wird am 01.01.2023 geplant --> keine IP
Am 10.01.23 aufgebaut --> IP = 192.168.178.11
Am 18.01.23 verändert --> IP bleibt gleich
Am 31.03.23 abgebaut --> keine IP

D.h. die IP 192.168.178.11 ist bis zum 10.01.23 und ab dem 31.03.23 vergebbar, aber dazwischen ist sie vergeben.

Ich glaube ich komme nicht um eine Zwischentabelle rum,
aber wie sieht das im Code aus? Mit einer Zwischentabelle habe ich in Java noch nicht gearbeitet.
 

Oneixee5

Top Contributor
Du kannst der Spalte IP_ADDRESS einen Unique-Constraint verpassen: CONSTRAINT UC_IP UNIQUE (IP_ADDRESS) So kann keine IP mehrfach verwendet werden.
 

DaBe1812

Bekanntes Mitglied
Gab es nicht eine UUID-Form, bei der ein Timestamp mit drin war? Dann bräuchte ich auf der einen Seite schonmal keinen kombinierten Primärschlüssel.

Da wären dann die ersten x Zeichen für das gleiche Objekt dieselben und dann kämen andere Zeichen für die Zeitscheibe.
Und in der n:m Tabelle gibt es eben für jede IP und jede Zeitscheibe eine Zeile.

Du kannst der Spalte IP_ADDRESS einen Unique-Constraint verpassen: CONSTRAINT UC_IP UNIQUE (IP_ADDRESS) So kann keine IP mehrfach verwendet werden.
Ich bin verwirrt, wo soll die Spalte IP_ADDRESS sein?
 

DaBe1812

Bekanntes Mitglied
Okay, würde das aber nicht dazu führen, dass ich die IP nur einmal vergeben kann?
Sie darf nur einmal zur selben Zeit vergeben sein, aber wenn ich auf alte Zeitscheiben schaue, dann will ich natürlich immer noch sehen können, welche IP ein Gerät einmal hatte, auch wenn diese schon wieder neu vergeben worden ist.
 

DaBe1812

Bekanntes Mitglied
Ja, normalerweise ist das richtig, aber da der USP des Systems die Historie ist, liegt das in einer Tabelle. Zeitscheiben sind jetzt mit UUID und Timestamp gelöst und ich werde wohl eine Zwischentabelle machen mit UUID + Timestamp vom System --> UUID IP. Dann muss ich halt etwas mehr Logik im System abfackeln, also bei neuer Version vom System muss ich eben auch eine neue Zeile in der Verknüpfungstabelle anlegen und wenn ich eine IP vergeben will muss ich schauen, ob das letzte verbundene System schon eine neuere Zeitscheibe ohne die IP hat.
Aber ich denke der Aufwand ist überschaubar und ein direkter DML-Zugriff auf die Datenbank soll sowieso nie möglich sein. Nächstes Jahr kommt evtl. noch eine Rest-SST für externe Systeme dazu, die uns lesen wollen.
 
Ähnliche Java Themen

Ähnliche Java Themen


Oben