카테고리 없음

스파르타 AI-8기 TIL(12/26)-Django

kimjunki-8 2024. 12. 26. 22:18

드디어 끝났다! 드디어!(응 어림도 없어 다음주 팀과제~) 

오늘은 ERD에 대해 조금 배워봅시다.

참고로 ERD는 Entity Relationship Diagram의 줄임말로, 데이터베이스에서 서로 관련이 있는 여러 데이터를 어떻게 연결할지 보여주는 그림입니다.

먼저 기본 키(PK)와 외래 키(FK)를 명확히 알아야 합니다.

PK와 FK의 의미
PK (Primary Key, 기본 키):
각 테이블에서 하나의 열(컬럼)이 고유하게 모든 데이터를 식별할 수 있도록 만든 값입니다.
예를 들어, 학생 정보를 저장하는 테이블에서 학생의 학번을 PK로 설정할 수 있습니다. 이렇게 하면 같은 학번을 가진 두 명의 학생이 있을 수 없게 됩니다.
PK는 중복되지 않으며, null값을 가질 수 없습니다.

FK (Foreign Key, 외래 키):
다른 테이블의 PK를 참조하는 열입니다.
예를 들어, 학생 테이블에 학번을 PK로 만들고, 수업 테이블에서 학생이 어떤 수업을 들었는지를 기록하려면 수업 테이블에서 FK를 사용하여 학생 테이블의 학번을 참조할 수 있습니다.
FK는 해당 테이블에서 다른 테이블을 "참조"하는 역할을 합니다.

 

from django.db import models

# 학생 모델
class Student(models.Model):
    student_id = models.AutoField(primary_key=True)  # PK
    name = models.CharField(max_length=100)

# 수업 모델
class Course(models.Model):
    course_id = models.AutoField(primary_key=True)  # PK
    course_name = models.CharField(max_length=100)

# 학생이 수업을 듣는 모델 (FK 사용)
class Enrollment(models.Model):
    student = models.ForeignKey(Student, on_delete=models.CASCADE)  # FK
    course = models.ForeignKey(Course, on_delete=models.CASCADE)    # FK

이 코드에서:
Student 모델의 student_id는 학생을 유일하게 구별할 수 있는 기본 키(PK)입니다.
Course 모델의 course_id는 수업을 유일하게 구별할 수 있는 기본 키(PK)입니다.
Enrollment 모델에서는 student와 course가 각각 외래 키(FK)로, 다른 테이블의 기본 키를 참조하고 있어요. 즉, Enrollment 테이블은 학생과 수업을 연결하는 중간 테이블입니다.

 

다른 예시로는

from django.db import models

# Student 테이블 (학생 정보)
class Student(models.Model):
    student_id = models.AutoField(primary_key=True)  # 학번(PK)
    name = models.CharField(max_length=100)  # 학생 이름

    def __str__(self):
        return self.name

# Course 테이블 (수업 정보)
class Course(models.Model):
    course_id = models.AutoField(primary_key=True)  # 수업 ID(PK)
    course_name = models.CharField(max_length=100)  # 수업 이름
    student = models.ForeignKey(Student, on_delete=models.CASCADE)  # 학생(FK)

    def __str__(self):
        return self.course_name

Student 모델에서 student_id는 AutoField로 설정되어 기본 키(PK)로 사용됩니다. 이 값은 자동으로 생성되며 각 학생을 고유하게 식별합니다.
Course 모델에서 student는 ForeignKey로 설정되어 있습니다. 이 열은 Student 모델의 student_id를 참조하고 있습니다. 이처럼 ForeignKey는 다른 테이블의 PK를 참조하는 FK입니다.
on_delete=models.CASCADE는 학생이 삭제되면 그 학생이 등록된 수업도 함께 삭제되도록 하는 설정입니다.

 

암튼 여기까지....