Einschränkung möglicher Kombinationen

Landei

Top Contributor
Ich will unser recht kompliziertes Schichtsystem neu modellieren.

Es gibt eine Tabelle "Schichtregime", die den Typ der Rotation festlegt (Vierschicht, Dreischicht, Tagschicht u.s.w.).

Dann gibt es eine Tabelle "Segment", das zu einem Regime die möglichen groben "Tagesschnippsel" auflistet (also für Vierschicht z.B. 4früh, 4spät und 4nacht, oder für Tagschicht eben nur Tag).

Dann habe ich eine Tabelle "Rotation", dass die Schichtgruppen innerhalb eines Regimes definiert (Vierschicht hat etwa A4 bis D4, Dreischicht hat A3 bis C3, Tag hat nur Day).

Danke, dass ihr bis hierher durchgehalten habt, denn jetzt kommt mein Problemkind: Die Tabelle "Calendar", die ein Datum, ein Segment und einen Rotation enthalten soll, also z.B. 01.01.2011, 4früh, B4 ("am 1.1. hat die Schichtgruppe B4 Frühschicht").

Wie kann ich nun sicherstellen, dass nur Segmente und Rotationen des gleichen Regimes kombiniert werden können? Sicher kann (und werde) ich das Programm entsprechend absichern, und ich könnte auch Trigger schreiben, aber wie sähe eine allgemeingültige, herstellerunabhängige und strukturelle SQL Lösung aus?
 
M

Marcinek

Gast
Solche restriktionen sind in sql nicht möglich.

Du könntest eine weitere Tabelle mit möglichen Kombinationen machen, aber meiner Meinung nach gehört das auf Fachlogik schicht.
 

tuttle64

Bekanntes Mitglied
Und ich dachte, ich bin nur zu blöd, sowas zu finden...


was du beschreibst klingt nach referentieller integrität und hierzu gibt es z.B. in mysql die möglichkeit, auf ein tabellenattribut einen foreign key zu definieren und dann als referenz für die integrität eine tabelle sowie ein attribut anzugeben, welche die möglichen werte enthält. versucht man nun, im pk eine nicht-existierender wert einzufügen, erhält man ein "key constraint fails".
 

Landei

Top Contributor
Nein, es ist komplizierter. Referentielle Integrität ist, wenn ich prüfe, ob eine Schichtgruppe, die ich in Calendar einfügen will, auch wirklich in der Tabelle Rotation existiert. Das mache ich natürlich. Was ich will ist testen, ob Schichtgruppe und Segment eines Calendar-Eintrags auch "zusammenpassen" (also die zusätzliche Bedingung Schichtgruppe.regime == Segment.regime erfüllt ist). Ich wüßte nicht, wie das mit Fremdschlüsseln zu realisieren wäre.
 
G

Gast2

Gast
Wenn ihr eine Oracle verwendet könnte man sowas mit einem Function-Based Constraint realisieren:
Oracle tools tips - SQL Function Based Constraints - Symmetric Functions

Ob es sowas für andere RDBMS gibt weiß ich nicht. Musst du mal in die Doku schauen. Bei Postgres würd ich stark drauf tippen das es geht. Das wäre somit evtl keine "eine allgemeingültige, herstellerunabhängige und strukturelle SQL Lösung", vielleicht ist das aber auch ein Standard, hab mich nie mit anderen RDBMS auseinandergesetzt.
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben