一个表可以有多少主键?
1、数据库中的每张表只能有一个主键,不可能有多个主键
2、所谓一个表多个主键,我们称之为联合主键
3、主键的作用是保证数据的唯一性和完整性,同时通过主键检索表增加检索速度
Django中如何创建联合主键
单张表内建立联合主键
class IotTemp(models.Model):
seq_no = models.IntegerField(blank=False, null=False)
order_id = models.CharField(max_length=32, blank=True, null=True, verbose_name=u'订单id')
mac = models.CharField(max_length=64, blank=False)
temperature = models.FloatField(default=0.0)
time = models.DateTimeField(auto_now=False)
user = models.CharField(max_length=TEXT_LEN, blank=True, verbose_name=u'所属人')
#seq_no,order_id,mac作为联合主键保证数据不重复
class Meta:
app_label = 'iot'
unique_together = (("seq_no", "order_id", "mac"),)
verbose_name_plural = u"通用温度表"
关联表内建立联合主键
class user(Model):
id=AutoField(primary_key=True)
name = CharField(max_length=30)
age =IntegerField()
class role(Model):
id=AutoField(primary_key=True)
name=CharField(max_length=10)
#这是两个model有一个roleUser的model来描述use与role的关系,需要user的id与
role的id做外键,也做联合主键,如下:
class roleUser(Model):
userId=ForeignKey(user)
roleId=ForeignKey(role)
class Meta:
unique_together=("userId","roleId")
单张表内设置相同的外键
related_name的值不一样,否则会报错
class Attention(models.Model):
"""
用户关注模块
"""
follower = models.ForeignKey(User, on_delete=models.CASCADE, related_name='follower', verbose_name='关注用户')
followed = models.ForeignKey(User, on_delete=models.CASCADE, related_name='followed', verbose_name='被关主用户')
has_follow = models.BooleanField(default=True, verbose_name='判断是否已经关注')