Framework/Django

장고 개인 프로젝트 이전 ERD 공부

JM Lee 2023. 4. 5. 20:35
728x90

ERD(Entity Relationship Diagram) : 독립체들 간의 관계를 나타내는 도표(실체 연관도)

: 실체와 이들의 관계를 도형으로 표현한 것. 실체의 상관관계 다이어그램은 사용자와 어플리케이션 개발자 간의 자료를 공통적으로 이해할 수 있도록 하는 유용한 매체가 된다.(네이버 사전)

 

ERD를 만든다는 것은 실체를 연관도 내에서 모델링하는 것인데, 모델의 정확한 뜻이 무엇일까?

 

모델은 어떤 '목적'을 가지고 '진짜'를 '모방'한 것이다.

 

그렇다면 좋은 모델은 목적에 부합한 모방본이다.

 

ERD는 바로 이런 면에서 부합하는 모델 중 하나라고 보여진다.

 

표에 정보를 담아 하나의 연관도 안에서 모든 관계(목적)을 보여주는데

와이어프레임을 한 눈에 보기 편하기 때문에 이번 장고 프로젝트에 이 모델을 사용해보기로 했다.

 

그렇다면 ERD에 대해서 간략하게라도 알아볼 필요가 있다.


우선, 우리가 나타내야 하고(GET), 저장해야 할 정보(POST)가 무엇인지 정확히 파악할 필요가 있다.

 

머릿속에서 정확히 내가 구현하고 싶은 것을 정리해야

다이어그램으로 정리하는 것이 어려워지지 않는다.

 

머릿속으로 구현이 되었으면 다음 단계로 넘어간다.

 

데이터 모델링

개념적 모델링 - 논리 모델링의 단계로 이어지는 이 과정은

다이어그램의 기본적인 틀을 만드는 과정이다.

 

1. 개념적 모델링

데이터 간의 관계를 구상하고, 각 객체 간 관계를 발견하고 표현하는 단계

이 과정에서 약식 ERD를 그린다.

간단한 기호이니 알아두면 좋을듯?

 

2. 논리적 모델링

개념적 모델링에서 작성한 약식 ERD 구체화하는 과정

데이터 타입을 명시(객체, 내부 데이터 간단하게 명시)

    -key, 속성, 관계 표시

관계의 참여도 : 테이블과 테이블을 연결할 때 써먹을 예정


외래 키(foreign key)

1:n 관계에 있을 시 사용. 하나의 테이블에 많은 column이 생겨야 하는 경우에 사용

ForeignKey(참조 모델(테이블), on_delete=개체 삭제시 수행동작, related_name=개체관계에서 사용할 이름, db_column=db상 필드 이름)

db_column은 지정해주지 않으면, Review 모델 안에 movie는 db에서 column명이 movie_id로 된다.

 

식별관계 (실선)

 - 부모 테이블의 PK가 자식 테이블의 PK(Primary Key, 기본키) / FK(Foreign Key, 외래키) 가 되는 경우

 - 부모가 있어야 자식이 생기는 경우

 

비식별관계 (점선)

 - 부모 테이블의 PK가 자식 테이블의 일반 속성이 되는 경우

 - 부모가 없어도 자식이 생기는 경우


이 과정에서 key에 대한 이해도가 부족해서 다시 공부하게 되었다.

 

Primary key : 검색할 때 데이터에 접근해야 하는데, 모든 데이터 중에서 검색 시 찾을 수 있는 고유값(중복 x)

 

Unique key : Primary key와 마찬가지로 중복값이 없다.

  Primary key Unique key
테이블 당 KEY의 한도 하나만 가능 여러 개 가능
INDEX의 기준이 되는가? O X
중복값이 있는가? X X
예시 ID or INDEX 닉네임, 작성 날짜, 레벨 등등 여러 가지

포렌 key : 다른 테이블에 엮어주는 key

          ex) 게시판에 비유하자면, 게시글과 코멘트의 관계로 >> One to Many의 관계에서 사용됨.

                게시글에 접근할 때 코멘트를 같이 보기 위해 코멘트에도 동시에 접근하게 하는 역할

 

이걸 가지고 KEY에 대해 제대로 공부했다고 하긴 뭐하지만.. 아무것도 모른 상태에서 나름 공부했다.


Many to Many

 

다수 대 다수의 관계로, 주로 ManyToManyField 코드 용어로 해결함.

ManyToManyField(참조 모델(테이블), related_name=개체관계에서 사용할 이름)


물리적 모델링

 

논리적 모델링 후 실제 데이터베이스 생성

필요한 column을 지정하고 장고에서 model.py 사용

다 추가한 후 makemigrations, migrate 작업하여 데이터베이스에 테이블 등록


기타 참고 사이트

ERDCloud