AI 웹개발반

[TIL] ERD 특강!

째깍단 2023. 4. 27. 21:58

오늘 한 것

 

[O] : 알고리즘 페어프로그래밍

 

[X] : 장고 강의 듣기? 오늘 특강 2개라서 가능할지..? : 불가능했다ㅋㅋ

- [X] : 5주차 듣기

 

[△] : 개인과제 완성하기  : 회원수정/로그아웃/탈퇴기능을 만들고 검증하는 과정에 있다..ㅠㅠ

- [O] : todo list 클론코딩으로 완성하기

- [O] : 코드 이해하기

 

[O] : 협업 특강 / ERD 특강

 

 

 

 

 

ERD 뿌시기!

 

 

모델 생성시’id’값을 장고에서는 자동으로 생성해준다

 

user_id in user = PrimaryKey

user_id in article = ForeignKey

 

ForeignKey, PrimaryKey를 활용하지 않을 경우의 문제점

  • 불필요한 데이터를 보유하게 됨(중복 데이터)
  • 무한으로 증식하는 테이블 컬럼(데이터 찾기가 어려움)

 

 

 

  • 1대 1의 관계

    user = models.ForeignKey(User, unique=True)
    unique=True, 로 유저가 1개 테이블만을 만들 수 있게 해준다.

 

 

  • 1대 다의 관계

    user = models.ForeignKey(User, ~~)

 

 

  • 다대 다의 관계

    장고에서는 ManyToManyField (한계점도 있다.)
    1대 다 관계로 양쪽이 연결되어있다.

 

 

 

현역에서는 manytomany보다 보통은 foreignkey만 가지고 다대다 관계를 세팅한다.

다대다의 중간 테이블을 생성해 묵시적 다대다 관계를 만들어준다.

 

미팅 -< 미팅방 >-유저

 

 

 

장고에서 ManyToManyField의 단점이나 한계점

 

  1. 중복 관계: ManyToManyField는 중복 관계를 허용 = 이는 불필요한 데이터베이스 요청을 일으키고 데이터베이스를 부하시킬 수 있다

  2. 양방향 관계: ManyToManyField를 사용하면 연결된 두 모델 간에 양방향 관계가 생성된다. 이는 양쪽에서 서로 연결된 객체를 접근할 수 있게 되어, 모델 간의 관계가 복잡해질 수 있다.

  3. 중개 모델: ManyToManyField를 사용하면 자동으로 중개 모델이 생성된다. 이는 모델 간의 관계를 추가하고 관리하는 데 유용하지만, 일부 경우에는 이를 직접 사용해야 하는 경우도 있다.

  4. 직관성: ManyToManyField는 다른 관계 타입보다 사용이 복잡할 수 있다. 필드의 이름과 관계되어 있는 중개 모델, 추가/삭제 방법 등을 명확하게 이해하기 위해서는 장고 ORM에 대한 이해도가 높아야 한다.

 

 

 

 

 

 

 

식별 / 비식별 관계

 

  • 비식별 관계 란 부모테이블의 기본키가 자식테이블에서 외래키 역할만 하는 관계 
  • 식별 관계 란 부모테이블의 기본키가 자식테이블에서 외래키 뿐만 아니라 기본키의 역할까지 하는 경우

 

 

- 식별관계 - 

 

  • 종속성이 강함!
    student data가 없어지면 grade가 의미가 없다.

 

 

예시 :  Student model의 Student id 를 Grade에 넣어주기..

 

Student 테이블
Grade 테이블

class Grade(models,Model)
    student models.OntToOneField(Student, on_delete=models.CASCADE, primarykey = True)

 

primarykey = True를 하면 Grade의 id가 자동 생성되지 않고 student의 id를 가져와서 사용하게된다!

 

 

 

 

 

- 비식별관계 - 

지금까지 해왔던 것들이 비식별관계!

 

  • 독립적이다!
    Soldier 데이터가 없어져도 중대 데이터활용가능

 

중대 id를 가져와서 군인 테이블에 추가
중대 테이블을 생성

class Soldier(models.Model):
    Name = models.CharField(max_lenght=50)
    Department = models.ForeignKey(Department, on_delete=models.CASCADE)

** on_delete=models.CASCADE 안에는 기본적으로 null=False 가 들어있다.

 

class Department(models.Model):
    name = models.CharField(max_length=50)

 

 

 

 

 

대부분의 관계는 비식별관계로 처리하는 경향이 있다.

- 데이터 정합성,

- 구현/운영의 용이성을 위함

 

 

 

 

 

 

 

 

 

 

 

 

ㄴ 좋아하는 페이지를 골라서 erd를 만들어보세요! 연습도 되고 실무에서 도움됨!

** 주말동안 ERD만들어보자!

 

Starbucks ERD 만들어보기

https://www.starbucks.co.kr/index.do

 

 

 

 

 

새마을 식당 ERD 만들어보기

https://newmaul.com/index.php

 

 

 

 

 

 

 


이제 ERD는 다른사람한테 더 잘 설명할 수 있을 것 같다!

 

+++

 

앗 follower followings 주웠다!