Ich habe eine Tabelle, die eine Multi-zu-Eins-Beziehung beschreibt, sagen wir zwischen Bildern und Alben. Ich möchte in der Lage sein, ein und nur ein Bild pro Album als Titelbild des Albums auszuwählen. Im Moment ist die Tabelle wie folgt aus:Wie erzwinge "Eindeutigkeit" mit booleschen Spalte (ein bisschen wie Radio-Buttons)?
AlbumID int primary key,
PictureID int,
IsCover bool
Angenommen, ich will nicht das gesamte Schema ändern (eine Lösung könnte sein, die sich zu bewegen „ist Cover von“ Beziehung zu einer anderen Tabelle, die einen Ein- to-one-Beziehung, aber es ist bevorzugt, die bereits implementierten Abfragen nicht durch Hinzufügen einer anderen Tabelle zu ändern), gibt es eine Möglichkeit, zu erzwingen, dass alle Einträge mit derselben AlbumID ABER ONE IsCover auf false gesetzt haben?
Ich suche nach serverseitigen Lösungen. Ich arbeite mit Microsoft SQL Server 2012. Die UNIQUE-Einschränkung kann hier nicht angewendet werden, sonst könnte ich nur ein Cover und ein Cover für jedes Album haben. Ich habe bereits eine Überprüfung in meiner Anwendung implementiert, aber ich hätte gerne eine zusätzliche Sicherheitsstufe.
Vielen Dank im Voraus.
Was ein Trigger nach Aktualisierung/nach Einsatz zu verwenden, ob der neue Eintrag überprüft soll die Abdeckung Einzelteil sein und dann alle anderen Marken relevante Einträge als falsch? –
Mit der CHECK-Einschränkung können Sie beliebige Regeln in der Tabelle erzwingen. Erstellen Sie eine Funktion, die die tatsächliche Überprüfung durchführt, und verwenden Sie sie in der Integritätsbedingung. –
Danke an euch beide! Ich versuche jedoch herauszufinden, ob es etwas Ähnliches wie die einzigartige Einschränkung gibt, um die Dinge so einfach wie möglich zu halten. – Simone