表關係
表關係,即表與表之間的關係。兩表之間的表關係是相對的。
設表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)