Vorrei esaminare l'aggiunta di una colonna alla tabella GroupQuoteItem, GroupQuoteItem.Priority. Questa colonna verrebbe utilizzata nella query che determina il prezzo finale. Se hai N sconti con la stessa priorità più alta, verranno impilati uno sopra l'altro (l'ordine non ha importanza, grazie all'associatività della moltiplicazione).
Se tutti questi sconti con priorità alta vengono successivamente rimossi, gli sconti con priorità inferiore possono prendere il loro posto. Questo dovrebbe aiutarti a creare strutture di sconto piuttosto complesse.
Spero che almeno questo ti dia un punto da cui partire.