ERD가 뭐야?
ERD(Entity-Relationship Diagram)는 데이터베이스의 구조를 개념적으로 표현하기 위한 도구로 복잡한 데이터베이스 스키마를 시각적으로 나타내어, 데이터 사이의 관계를 명확하게 이해하고 효율적으로 설계할 수 있도록 도와준다.
ERD는 뭐로 구성되었지?
1. 엔티티 (Entity)
- 데이터베이스에 저장되는 정보의 단위로, 사람, 장소, 물건, 이벤트 등과 같이 식별 가능한 데이터 집합이다.
- 각 엔티티는 ERD 내에서 사각형으로 표현된다.
2. 속성 (Attribute)
- 엔티티를 구성하는 데이터의 항목이나 성질로, 엔티티의 세부 정보를 나타낸다.
- 예를 들어, '고객' 엔티티는 이름, 주소, 전화번호와 같은 속성을 가질 수 있다.
- 속성은 보통 타원형으로 표현되며, 엔티티에 연결되어 나타난다.
3. 관계 (Relationship)
- 두 개 이상의 엔티티 간의 연관성을 나타낸다.
- 관계는 보통 선으로 표현되며, 관계의 이름과 함께 일대일(1:1), 일대다(1:N), 다대다(N:M) 등의 관계를 명시한다.
4. 기본 키 (Primary Key)
- 각 엔티티 내에서 각 인스턴스를 고유하게 식별할 수 있는 하나 이상의 속성이다.
- ERD에서는 속성 이름 아래에 밑줄을 긋거나 다른 방식으로 강조하여 나타낸다.
5. 외래 키 (Foreign Key)
- 다른 엔티티의 기본 키를 참조하는 속성으로, 두 엔티티 간의 관계를 실제로 연결하는 데 사용된다.
ERD 작성 과정
- 요구사항 분석 : 데이터베이스가 해결해야 할 문제를 이해하고, 필요한 데이터와 관계를 식별한다.
- 엔티티 식별 : 관련 데이터 집합을 식별하고 엔티티로 정의한다.
- 속성 결정 : 각 엔티티의 세부 정보를 나타낼 속성을 결정한다.
- 관계 정의 : 엔티티 간의 관계를 파악하고, ERD에 표현한다.
- 도식화 : 식별한 엔티티, 속성, 관계를 이용해 ERD를 도식화한다.
어떤 관계 유형이 있어?
1. 일대일 (1:1) 관계 : 두 엔티티가 서로 하나의 인스턴스만을 관련짓는 관계이다.
- 특징 : 매우 제한적이며, 각 엔티티는 상대 엔티티와 단 하나의 관계만을 가진다.
- 사용 시기 : 개인정보와 사용자 계정과 같이 일대일로 대응되는 정보를 관리할 때 주로 사용된다.
2. 일대다 (1:N) 관계 : 한 엔티티의 인스턴스가 다른 엔티티의 여러 인스턴스와 관련될 수 있는 관계를 의미한다.
- 특징 : 가장 흔하게 사용되며, 한 쪽은 여러 관계를 가질 수 있지만 다른 한 쪽은 오직 하나의 관계만을 가지게 된다.
- 사용 시기 : 상품과 주문과 같이 하나의 상품이 여러 주문에 포함될 수 있을 때 사용된다.
3. 다대일 (N:1) 관계 : 일대다 관계의 반대로, 여러 엔티티 인스턴스가 하나의 인스턴스와 관련되는 경우에 사용한다.
- 특징 : 일대다 관계와 유사하지만, 관계의 방향이 반대다.
- 사용 시기 : 보통 ERD를 구성할 때 일대다 관계로 표현되기 때문에 다대일 관계를 구분해서 사용하지는 않는다고 한다.
4. 다대다 (N:M) 관계 : 두 엔티티의 인스턴스들이 서로 다수의 관계를 가질 수 있는 복잡한 관계이다.
- 특징 : 두 엔티티 간에 복잡한 연관성을 가지고 있으며, ERD에서는 이를 직접 표현하지 않고 엔티티를 통해 두 개의 일대다 관계로 나누어 표현하는 편이라고 한다.
- 사용 시기 : 학생과 수업과 같이 한 학생이 여러 수업을 들을 수 있고, 한 수업에 여러 학생이 있을 때 사용한다.
그러면 어떻게 그리면 돼?
1. 주제 식별 : ERD를 그리기 전에 데이터베이스의 주제를 식별해야 한다. 예를 들어, 학생 정보를 관리하는 데이터베이스를 ERD로 표현한다고 가정을 해본다면.
2. 개체 식별 : 데이터베이스에 포함될 개체를 식별한다. 학생, 교수, 강의 등이 개체가 될 수 있다. 이러한 개체들은 데이터베이스 테이블로 표현된다.
3. 속성 식별 : 각 개체의 속성을 식별한다. 개체의 속성은 해당 개체의 특성을 나타내며, 테이블의 열로 표현된다. 예를 들어, 학생 개체의 속성으로는 학번, 이름, 성별 등이 있을 수 있다.
4. 관계 식별 : 개체들 간의 관계를 식별한다. 예를 들어, 학생과 교수 간에는 "수강"이라는 관계가 있을 수 있다. 이러한 관계는 ERD에서 선으로 표현이 된다.
5. ERD 그리기 : 개체와 관계를 그림으로 표현한다. 개체는 직사각형으로 표현되며, 속성은 개체 내에 속성 이름과 함께 표시된다. 관계는 선으로 표현되며, 관계 선 위에 관계의 유형을 표시할 수도 있다.
6. 추가 정보 : 필요에 따라 ERD에 추가 정보를 포함할 수 있다. 예를 들어, 테이블 간의 관계 유형, 속성의 데이터 유형 등을 추가로 표현할 수 있다.
ERD를 배워야 하는 이유
다양한 이유가 존재하는데 우선 ERD는 데이터베이스의 구조를 명확하게 이해하고 표현하는 데 도움이 되는 매우 강력한 도구이며 구조에 대한 이해가 없다면 테이블 짜는 것조차 버겁기도 하고 데이터 흐름을 명확하게 파악해야만 엔티티 간의 연관성을 나타낼 수 있기 때문이다. 그리고 데이터베이스 설계 초기 단계에서 매우 중요한 역할을 하고 있으며, 설계자와 이해관계자 간의 커뮤니케이션 수단으로 사용이 될 수 있기도 하고 시스템의 데이터 구조를 문서화하는 데에도 매우 유용하다.
내가 그려왔던 ERD
https://www.erdcloud.com/ 라는 사이트를 알게 되서 다른 사람들이 그린 ERD를 계속 보면서 그리고 있다.
MySQL workbench에 오류를 2달 동안 왜 안되는지 해결하지 못해서 여기저기 떠돌아다니면서 찾게 된 사이트인데 정말 괜찮다는 생각이 들었다. 다른 분들은 어떻게 ERD를 구성했는지를 볼 수 있어서 좋은 것 같다. 정작 ERD는 VSCode 확장에서 사용해서 그리고 있다... 전부 그리고 나면 좋은데 그리기 전에 생각할 시간도 너무 많이 필요하고 아직 DB가 뭐가 있다 정도만 아는 수준이라 시기상조라고 느끼면서도 슬슬 최종프로젝트도 있고 취업을 하려면 해야만 하니깐... 도커랑 쿠버네티스는 또 언제 써보고 그럴까
툴만 달라졌을 뿐 여전히 갈 길이 멀다...
마치며
개발공부를 하고 DB를 이제서야 접하게 되었는데 결국 ERD 설계도...? 를 짜는 것이 제일 힘든 것 같다. DB의 흐름이나 구조를 어떻게 할 것인지 어떤 툴을 사용해서 개발을 진행할 것인지까지도 어느정도 연관이 되어있기도 한 것 같고 초기 단계는 이게 전부라는 생각이 좀 들었다. 테이블은 어떻게 어떻게 그리겠는데 관계도를 설정하는게 이해하기가 꽤 어렵다.
'Framework > Spring' 카테고리의 다른 글
dao, dto, vo가 뭐길래 폴더 구조에 꼭 있는걸까 (0) | 2024.01.16 |
---|---|
스프링 프레임워크와 스프링 부트 (0) | 2024.01.03 |
VScode와 intelliJ 사용할 때 로그 처리 방식이 왜 다를까? (0) | 2023.12.30 |
Gradle이 Maven 대신에 많이 사용되는 이유는 뭘까? (0) | 2023.12.21 |
상속과 인터페이스는 언제 써야될까...? (0) | 2023.12.08 |
쓰임 있는 사람이 되기 위해 노력 중입니다.