如何使用单个主键而不是复合主键对以下方案进行建模?

时间:2013-05-21 06:27:09

标签: sql django

假设我正在为田径比赛建模。主键是date,track和race_no。

class Event(models.Model):
    date = models.DateField()
    race_no = models.IntegerField()     
    track = models.CharField(max_length = 4)
    temperature = models.IntegerField()

class Race(models.Model):
    date = models.DateField()
    race_no = models.IntegerField()     
    track = models.CharField(max_length = 4)
    athlete_id = models.ForeignKey(Athlete)
    finishing_pos = models.IntegerField()   

现在假设我希望为用户提供查找特定事件的表单。他们将输入日期,race_no和跟踪。现在在结果中我希望提供事件结果和温度。通常,这对SQL JOIN来说是微不足道的。 Django目前对复合键没有太多支持。如何使用单个自动递增主键对此用例进行建模,这对Django更友好。

2 个答案:

答案 0 :(得分:2)

使用unique_together。 通过这种方式,您可以对所有内容进行递增ID,但是当它们放在一起时,它们会形成一个唯一的密钥。

您在类'Meta class'中定义unique_together

class Race(models.Model):
    date = models.DateField()
    race_no = models.IntegerField()     
    track = models.CharField(max_length = 4)
    athlete_id = models.ForeignKey(Athlete)
    finishing_pos = models.IntegerField()

    class Meta:
        unique_together = ("date", "race_no", "track")

答案 1 :(得分:0)

我会使用"Surrogate key",我不知道'django',但不是重点,因为恶劣天气导致日期发生变化,您的数据库会出现问题(不会使用django框架) ,关键是永远不要使用可能改变属性(或在PK内)