葉覺的Django之旅【07-繞不開的表關係】

表關係

表關係,即表與表之間的關係。兩表之間的表關係是相對的。
設表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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章