Mysql
 sql >> Baza danych >  >> RDS >> Mysql

jak wymusić warunkowe ograniczenie unikalności

Zdefiniuj swoje unikalne ograniczenie w jeszcze jednym polu:deleted i twoje pseudo-unikalne pola. Następnie, aby reprezentować nietrwałe usuwanie, przypisz identyfikator modelu do deleted; dla nieusuniętych elementów przypisz 0.

Przy takim podejściu, dla nieusuniętych elementów, ponieważ deleted pole ma stałą wartość, wielopolowe ograniczenie unikatowe skutecznie zignoruje wartość deleted i wymuszać unikalność tylko dla pól pseudounikatowych; dla usuniętych elementów, deleted zostanie wzięte pod uwagę, a ponieważ jest unikatowe, ograniczenie zawsze będzie spełnione - więc dowolna liczba modeli z tymi samymi wartościami pseudounikalnych pól może współistnieć.

Na przykład poniższy kod może być tym, czego szukasz.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ADDTIME() zwraca 24 godzinny czas

  2. Jak podzielić wyniki zapytań na strony dla Infinite Scroll?

  3. Jak w złączeniu poprzedzić wszystkie nazwy kolumn tabelą, z której pochodzi?

  4. Wstawianie tekstu hebrajskiego do MySQL za pomocą PHP (tekst śmieci)

  5. BULK INSERT w MYSQL