Mysql
 sql >> база данни >  >> RDS >> Mysql

как да наложите условно ограничение за уникалност

Дефинирайте вашето уникално ограничение в още едно поле:deleted и вашите псевдо-уникални полета. След това, за да представите меко изтриване, присвоете идентификатора на модела на deleted; за неизтрити елементи задайте 0.

С този подход за неизтрити елементи, тъй като deleted полето се оценява последователно, уникалното ограничение за много полета ефективно ще игнорира стойността на deleted и да наложи уникалност само за псевдо-уникалните полета; за изтрити елементи, deleted ще бъдат взети под внимание и тъй като е уникално, ограничението винаги ще бъде изпълнено – така че всеки брой модели със същите стойности на псевдоуникални полета могат да съществуват едновременно.

Например следният код може да е това, което търсите.

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. Трябва ли да се предпазя от SQL инжекция, ако използвам падащо меню?

  2. SQl актуализация от таблица с произволни имена

  3. Изтриване на дублиращи се редове от MySql таблица

  4. Трябва ли да се придържам само към AWS RDS Automated Backup или DB Snapshots?

  5. Създайте C# класове, базирани на MySQL таблица