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 makemigrations
와 python3 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 |