sql >> Databáze >  >> RDS >> Mysql

jak vynutit podmíněné omezení jedinečnosti

Definujte své jedinečné omezení v dalším poli:deleted a vaše pseudo-unikátní pole. Poté, abyste reprezentovali měkké odstranění, přiřaďte id modelu deleted; pro nesmazané položky přiřaďte 0.

S tímto přístupem pro obnovené položky, protože deleted pole má konzistentní hodnotu, jedinečné omezení s více poli bude efektivně ignorovat hodnotu deleted a prosadit jedinečnost pouze pro pseudounikátní pole; u smazaných položek deleted budou brány v úvahu, a protože je jedinečný, omezení bude vždy splněno – takže může vedle sebe existovat libovolný počet modelů se stejnými pseudojedinečnými hodnotami polí.

Například následující kód může být to, co hledáte.

class Deletable(models.Model):
    deleted = models.IntegerField(default=0)

    class Meta:
       abstract=True

    def soft_delete(self):
       self.deleted=self.id
       self.save()

class ConcreteModel(Deletable):
    a = models.IntegerField()
    b = models.IntegerField()

    class Meta:
       unique_together=('a', 'b', 'deleted')


  1. VYBERTE JEDEN řádek s hodnotou MAX() ve sloupci

  2. SQL kromě

  3. Funkce DBTIMEZONE v Oracle

  4. Proč pořadí řazení varchar společnosti Oracle neodpovídá chování srovnání varchar?