Ho una tabella che descrive una relazione multi-to-one, diciamo tra immagini e album. Voglio essere in grado di selezionare una sola foto per album come copertina. In questo momento, la tabella è così:Come applicare "unicità" alla colonna booleana (un po 'come i pulsanti di opzione)?
AlbumID int primary key,
PictureID int,
IsCover bool
Supponendo che io non voglio cambiare lo schema globale (una soluzione potrebbe essere quella di spostare il "è cover di" relazione a un altro tavolo, la definizione di un one to-one, ma è preferibile non modificare le query già implementate aggiungendo un'altra tabella), esiste un modo per far rispettare tutte le voci con lo stesso ID album BUT ONE che IsCover è impostato su false?
Sto cercando soluzioni lato server. Sto lavorando con Microsoft SQL Server 2012. Il vincolo UNIQUE non può essere applicato qui, altrimenti potrei avere solo una copertina e una non copertina per ogni album. Ho già implementato un controllo nella mia applicazione, ma mi piacerebbe davvero avere un ulteriore livello di sicurezza.
Grazie in anticipo.
Cosa succede ad usare un trigger dopo l'aggiornamento/dopo inserto che controlla se la nuova voce dovrebbe essere l'elemento di copertura e poi segna tutti gli altri voci pertinenti come false? –
Utilizzando il vincolo CHECK puoi applicare le regole che desideri sul tavolo. Creare una funzione che esegue il controllo effettivo e utilizzarla in un vincolo. –
Grazie a tutti e due! Tuttavia, sto cercando di scoprire se c'è qualcosa di simile al vincolo univoco, per mantenere le cose il più semplice possibile. – Simone