2012-03-27 8 views
1

Ich habe eine Klasse A und eine Klasse B, die von A erbt. Klasse A hat ein bestimmtes Attribut X. Klasse B fügt ein weiteres Attribut Y hinzu. Eine Instanz von B ist eindeutig identifiziert durch sein Paar von Attributen {X, Y}. Also, {X, Y} ist ein Kandidat Schlüssel für die Klasse B. Offensichtlich existiert dieser Schlüssel nicht auf der Ebene der Klasse A, da das Attribut Y nicht da ist. Ich verwende einen Ersatzschlüssel für die Klasse A.Eindeutige Einschränkung für verschiedene Klassen/Tabellen (TABLE PER SUBCLASS)

Jetzt verwende ich Hibernate für die objektrelationale Zuordnung. Wenn ich die Vererbungsstrategie TABLE PER SUBCLASS verwende, sehe ich keine Möglichkeit, eine UNIQUE-Einschränkung für mehrere Attribute zu definieren, die zu verschiedenen Klassen gehören (und dann in der DB zu verschiedenen Tabellen).

Meine Frage ist, wie kann ich eine eindeutige Einschränkung für diesen Kandidatenschlüssel mit Hibernate und allgemeiner in SQL definieren? Wenn es nicht möglich ist, was empfehlen Sie?

Dank

Antwort

1

Hier sind zwei Lösungen:

  • eine neue Tabelle mit einer Spalte erstellen, die seine PK ist. Diese Tabelle sollte alle Werte enthalten, die Sie eindeutig machen möchten. Erstellen Sie Fremdschlüssel für diese Tabelle, die sicherstellen, dass die Domäne für die Spalten aus der eindeutigen Tabelle stammt.
  • Erstellen Sie Trigger, die einen Fehler auslösen, wenn die Bedingung verletzt wird.
+0

Mein Primärschlüssel ist in A definiert, dies ist der Ersatzschlüssel (ein Long-Intergee). Die UNIQUE-Einschränkung muss auf das Attributpaar {X, Y} angewendet werden, das nicht der Primärschlüssel ist. Können Sie bitte ein Beispiel für die erste Lösung geben? –

+0

Sie können einen Clustered-Index und einen FK für mehrere Spalten haben. Es funktioniert wie eine einzelne Spalte. Die Kombination von Werten wird erzwungen, um einzigartig zu sein. – usr

Verwandte Themen