表关系
表关系,即表与表之间的关系。两表之间的表关系是相对的。
设表A与表B存在,则有以下三种关系:
- 一对多关系
如果表A中存在一条数据,对应表B中多条数据,则说A表与B表有一对多关系,反之B表与A表有多对一关系。如学院与学生,一个学院可以有多个学生,而一个学生同一时间只能有一个学院。 - 一对一关系
如果表A中存在一条数据,对应且只能对应表B中的一条数据,则说两个表互成一对一关系。如,学生与档案,每一个学生只有一个档案,每一个档案也只属于一个学生。 - 多对多关系
如果表A中存在多条数据分别与表B的多条数据有对应关系,则称这种关系为多对多关系,相应的,表B中也存在多条数据分别与表A的多条数据对应。多对多关系的成立,必须有一个中间表来存放两个独立表之间的对应关系,使用两个表的主键作为外键联合主键。
表关系的模型
- 使用五个表来描述表关系,其中
- 学院表与学生表成一对多关系
- 学生表与学生详情表成一对一关系
- 学生与课程表成多对多关系
- 在django中,中间表不需要自己创建
- on_delete=models.CASCADE,用以表示级联删除
# 学院表
class College(models.Model):
c_id = models.AutoField(primary_key=True)
college_name = models.CharField(max_length=30)
# 学生表
class Student(models.Model):
s_id = models.IntegerField(primary_key=True)
student_name = models.CharField(max_length=20)
c_id = models.ForeignKey(College, on_delete=models.CASCADE)
# 学生详情表
class StudentDetail(models.Model):
sd_id = models.AutoField(primary_key=True)
student_age = models.IntegerField()
student_phone = models.IntegerField()
student = models.OneToOneField(Student, on_delete=models.CASCADE)
# 课程表
class Course(models.Model):
co_id = models.AutoField(primary_key=True)
course_name = models.CharField(max_length=30)
student = models.ManyToManyField(Student)