본문 바로가기

웹개발

ERD 설계 특강 내용

ERD는 Entity Relationship Diagram의 약자로, 데이터베이스에서 개체들의 관계를 나타내는 다이어그램을 의미한다. ERD를 이용한 데이터 베이스 설계는 다음과 같은 절차를 따라 진행한다.

1. 요구사항 파악하기

기술적인 요구사항, 비 기술적인 요구사항 등을 파악해서 표시/저장할 정보를 파악해야한다. 이때 와이어프레임을 구성 후 진행하면 좋다.
예를 들어 게시판을 만든다면 작성자, 제목, 태그, 좋아요, 작성/수정일 등의 데이터가 필요할 것이다.

2. 데이터 모델링

본격적으로 데이터베이스의 구조를 설계한다.

2-1. 개념적 모델링

이 단계에서 우리는 요구사항 파악에서 찾은 필요한 데이터들 간의 관계를 구상한다. 또한 각 개체간의 관계를 발견하고 표현해야한다. 이를 위해 간단하고 명료하게 ERD를 그린다.

예시로 장고 강의에서 진행하며 만든 간단한 sns서비스의 간단한 ERD를 그려봤다.

2-2. 논리적 모델링

개념적 모델링을 구체화하는 단계로, 타입(자료형)을 명시를 하고 key, 속성, 관계를 모두 표시한다. [ERD cloud](https://www.erdcloud.com/)에서 그릴 수 있다. 필요한 테이블을 다 만들어두고 관계를 형성하는 순서로 한다. 아래는 테이블 간 관계를 나타내는 기호 일람이다.

외래키/ForeignKey

1:N관계 일때 사용한다.(예: 작성자 당 댓글 목록) 하나의 테이블에 많은 열들이 생기면 비효율적일때 다른 테이블을 참조모델로 가져오는 것이다.
ondelete: 외래키의 데이터가 삭제될 때 어떻게 동작할지 정해주는 매개변수이다.

relate_name: 개체관계에서 사용할 이름을 정한다.
db_column: DB필드상 이름. 따로 지정하지 않을 시 '..._id'형식으로 지정된다.

Many to Many

M:N관계일때 사용한다. (피자 메뉴와 토핑종류의 관계와 유사하다.)
ERD에서 논리적으로 표현하기는 쉬우나 보통 관련된 테이블을 하나 더 추가하여 1:N:1로 만드는 것이 일반적이다.

하지만 장고-sqlite3 에서는 자체적으로 manytomanyfield를 지원하므로 따로 테이블을 생성할 필요는 없다.
데이터를 주로 사용할 한쪽 모델에만 이 필드를 지정하면 된다.
양쪽에서 서로를 외래키를 지정하는 것과는 동작 방식이 다르다.

식별 관계와 비 식별 관계

부모가 되는 개체와 자식이 되는 개체가 있다고 할 때(부모: 사용자, 자식: 작성글), 부모의 primary key(보통 id, idx)를 자식도 primary key로서 가진다면 식별 관계라고 한다. 그렇지 않고 그냥 외래키로만 가질 경우 이것을 비식별 관계라고 한다.

- 식별관계 비식별관계
장점 자체적인 정합성 유지(자식이 있다면 부모도 존재) 부모와 자식을 독립적으로 생성가능, 변경이 쉬움
단점 구조변경이 힘들다 무결성,정합성 추가 보장필요

2-3. 물리적모델링

실제 데이터베이스 테이블을 models.py에서 클래스로 구현하는 단계이다.
저장 한 뒤 터미널에서 python3 manager.py makemigrationspython3 manager.py migrate를 순차적으로 실행시켜 실제 DB에 적용할 수 있다.

레퍼런스

스파르타코딩클럽 구동엽 튜터님
DevEric: [Database] 식별관계와 비 식별관계

'웹개발' 카테고리의 다른 글

DRF + ML 1일차  (0) 2023.05.31
ERD 강의 정리(04.27)  (0) 2023.04.27
장고와 MVT(23.04.25)  (0) 2023.04.25
세션인증과 토큰인증  (0) 2023.04.24
DRF 1강 - HTTP와 웹 동작 방식  (0) 2023.04.18