오늘은 지금까지 만든 게시판 시스템에 대한 ERD를 작성해보겠습니다.
ERD란 ? Entity Relationship Diagram 의 약자로,
시스템의 엔티티들이 무엇이 있는지 어떤 관계가 있는지를 나타내는 다이어그램입니다.
예를 들면 작가와 소설, 소비자 엔티티가 있고, 제작, 구매등의 관계가 있을때 ERD로 다음과 같이 표현할 수 있습니다.

ERD는 데이터 베이스 모델링, 관계형 DB에서 사용됩니다. 엔티티와 속성들을 테이블과 컬럼들로 변환할 수 있습니다.
<ERD 작성 과정>
1. 모든 엔티티를 정의
2. 엔티티 간 관계 정의
3. 속성 추가
먼저 지금까지 만든 게시판에서 모든 엔티티를 정의해보겠습니다.

Board와 MemberEntity 두개가 있습니다.
Board는 게시판 작성에 관련된 DB였고, MemberEntity는 로그인/회원가입에 관련된 DB입니다.
엔티티간 관계를 정의해보겠습니다.
한명의 회원(MemberEntity)이 여러개의 게시글(Board)를 작성할 수 있습니다.
그러기에, Board 엔티티는 MemberEntity와 다대일(Many-to-One) 관계를 가집니다.
속성(컬럼)을 추가해보겠습니다. 또한 주요 제약조건(PK, FK, Unique)도 함께 정의하겠습니다.
| 컬럼 이름 | 데이터 타입 | 제약 조건 | 설명 |
|---|---|---|---|
| id | Long | PK, Auto Increment | 회원 고유 식별자 |
| memberEmail | String | Unique, Not Null | 회원 이메일 (로그인 ID) |
| memberPassword | String | Not Null | 회원 비밀번호 (해싱 필요) |
| memberName | String | Not Null | 회원 이름 |
| 컬럼 이름 | 데이터 타입 | 제약 조건 | 설명 |
|---|---|---|---|
| id | Integer | PK, Auto Increment | 게시글 고유 식별자 |
| title | String | Not Null | 게시글 제목 |
| content | String | Not Null | 게시글 내용 |
| member_id | Long | FK (member_table의 id 참조) | 게시글 작성자 (MemberEntity와 다대일 관계) |
제약조건은 데이터베이스 테이블에 저장되는 데이터의 무결성과 일관성을 유지하기 위해 설정하는 규칙입니다. 대표적인 제약조건으로는 PK, FK, 그리고 Unique가 있습니다.
PK (Primary Key, 기본 키)
FK (Foreign Key, 외래 키)
member_id는 회원(Member) 테이블의 id를 참조하는 외래 키입니다.Unique (유니크 제약조건)
이러한 제약조건들은 데이터베이스의 무결성을 보장하고, 데이터의 일관성 유지에 중요한 역할을 합니다.
이제 ERDCloud에서 다이어그램을 작성해보겠습니다.
링크 - https://www.erdcloud.com/

보드, 멤버 엔티티를 각각 추가해주었습니다.

각각 엔티티에 맞는 속성을 추가하고, 엔티티 간의 관계를 추가해주었습니다. ERD 작성 끝! (이거 틀린겁니다. 밑에 수정 나와요 참고)
여기서 궁금증이 생겼는데, 보드엔티티에서 글 작성을 할때 멤버엔티티의 memberName을 가져오는데 이거 관계도 추가해야되지 않나? 라는 생각이 들었습니다.
하지만, 보드 엔티티에서 글 작성 시 멤버 엔티티의 memberName을 가져오더라도, 이미 보드 엔티티는 member 엔티티와 다대일 관계를 가지고 있기 때문에 별도로 추가적인 관계를 선언할 필요는 없다는 전지전능한 챗지피티의 답변을 들었습니다. 다시 생각해보니

이렇게 보드 엔티티 코드에서 이미 @ManyToOne과 @JoinColumn을 사용하여 Board 엔티티와 MemberEntity 간의 관계가 정의되어 있으므로, ERD상에서 별도로 추가적인 관계를 선언할 필요가 없다는걸 깨달았습니다.
근데 계속 볼수록 뭔가 이상한거같아서 맞나? 싶었었는데
ERDClouding에서 외래키 관계를 속성 값은 다르게 수정 할 수 있더군요. 같게만 되는줄 알고있었습니다. 그래서 제가 ERDClouding에 먼저 위처럼 만들고 지피티한테 물어봐서 지피티는 구조가 저렇게 돼있는줄 알고 답변한거같아요.
그래서 다시 작성해봤습니다. 외래키는 분명히 내가 member_id로 가져왔는데, 보드 엔티티에 id가 두개인게 아무리 생각해도 이해가 안됐어요.
결론적으로 ERD 작성 자체가 잘못됐습니다!!

이게 맞네요.!
보드 엔티티에서 member_id가 외래키가 되어 멤버 엔티티의 id값을 가져옵니다.
아래는 링크입니다.
https://www.erdcloud.com/d/8eTyZkAuvvp6z5xPn
PK,FK 관련해서 정리를 잘해주셔서 이해하기 좋았습니다! 너무 감사합니다!