ERD
(Entity Relationship Diagram)
- 와이어프레임(UI/UX) 구성 후 진행하면 편함
- 나타낼/저장할 정보 파악 : 작성자, 제목, 태그, 조회수, 댓글, 좋아요, 작성일 등
데이터 모델링
개념적 모델링
- 데이터 간의 관계를 구상
- 각 개체들간의 관계를 발견하고 표현
- 간단 명료한 ERD 그리기
논리적 모델링
- 개념적 모델링의 구체화
- 데이터 타입 명시
- Key, 속성, 관계 표시
반원 표시들은 1:N의 관계
외래키/ForeignKey
- 1(부모 테이블):N(자식 테이블)의 관계에 사용
- 하나의 테이블에 많은 column이 생겨야 하는 경우 매우 비효율적
- ForeignKey(참조 모델(테이블), on_delete=개체 삭제시 수행동작, related_name=개체관계에서 사용할 이름, db_column=db상 필드 이름)
- db_column은 지정해주지 않으면, Review 모델 안에 movie는 db에서 column명이 movie_id로 된다
on_delete 종류 : CASCADE, DO_NOTHING 추천
- ForeignKey ERD 표현
- 식별관계 (실선)
부모 테이블의 PK가 자식 테이블의 PK(Primary Key, 기본키) / FK(Foreign Key, 외래키) 가 되는 경우
부모가 있어야 자식이 생기는 경우
- 비식별관계 (점선)
부모 테이블의 PK가 자식 테이블의 일반 속성이 되는 경우
부모가 없어도 자식이 생기는 경우
Many To Many
- M:N의 관계
- 논리적으로 표현은 가능, django - sqlite3처럼 manytomanyfield를 지원하는 경우 따로 테이블 생성이 필요 없음
- 하지만, 해당 필드를 지원하지 않는 db 사용시 연결해 줄 테이블이 필요
- ManyToManyField(참조 모델(테이블), related_name=개체관계에서 사용할 이름)
- Many To Many ERD 표현
물리적 모델링
- 논리적 모델링 후 진행
- 실제 데이터 베이스 테이블 생성
- 필요한 column을 지정해주는 과정
- Django에서 models.py 사용
- makemigrations, migrate 과정
from django.db import models
from django.conf import settings
class Movie(models.Model): # 영화정보 저장 모델
title = models.CharField(max_length=100)
poster_URL = models.URLField(max_length=200)
content = models.TextField()
class Review(models.Model): # 영화 Review 저장 모델
movie = models. ForeignKey(Movie, on_delete=models.CASCADE) # movies 1:N의 관계 / model 삭제시 함께 삭제
title = models.CharField(max_length=100)
content = models.TextField()
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True, blank=True)
updated_at = models.DateTimeField(auto_now=True, blank=True)
like_users = models.ManyToManyFleld(settings.AUTH_USER_MMODEL, related_name='like_reviews') # 좋아요를 위한 M:N
class Comment(models.Model):
review = models.ForeignKey (Review, on_delete=models.CASCADE) # review 댓글 위해
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
content = models.Charfield(max_length=300)
ERD 다이어그램 툴 추천 : ERD Cloud
'Django' 카테고리의 다른 글
Django 기초 5주차 1_기능 추가_Sparta Coding Club (0) | 2023.04.05 |
---|---|
Django 기초 4주차 2_Sparta Coding Club (0) | 2023.04.05 |
Django 기초 4주차 1_Sparta Coding Club (0) | 2023.04.05 |
Django 기초 3주차_Sparta Coding Club (4) | 2023.04.05 |
Django 기초 2주차_Sparta Coding Club (2) | 2023.04.04 |