sql >> Database >  >> RDS >> Mysql

hoe een voorwaardelijke uniciteitsbeperking af te dwingen?

Definieer uw unieke beperking voor nog een veld:deleted en uw pseudo-unieke velden. Om een ​​zachte verwijdering weer te geven, wijst u de id van het model toe aan deleted; voor niet-verwijderde items, wijs 0 toe.

Met deze aanpak, voor niet-verwijderde items, aangezien de deleted veld een consistente waarde heeft, negeert de unieke beperking voor meerdere velden effectief de waarde van de deleted en uniciteit afdwingen voor alleen de pseudo-unieke velden; voor verwijderde items, deleted zal in aanmerking worden genomen, en aangezien het uniek is, zal er altijd aan de beperking worden voldaan - dus een willekeurig aantal modellen met dezelfde pseudo-unieke waarden van velden kan naast elkaar bestaan.

De volgende code kan bijvoorbeeld zijn wat u zoekt.

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. Waarom en wanneer moet ik SPARSE COLUMN gebruiken? (SQL-SERVER 2008)

  2. MySQL - Bestelquery en toon een willekeurige rij bovenaan

  3. Mysql-query gebruikt geen index als er variabelen zijn in WHERE

  4. Wat is de maximale querygrootte voor mysql?