ERD 사이트인 ERDCloud를 통해 ERD 설계 관련 기본 개념과 사용법을 알아보자.
ERD란?
Entity Relationship Diagram
개체-관계 모델.
테이블 간의 관계를 설명하는 다이어그램이다.
프로젝트 생성하기
우측 상단의 + 버튼을 클릭한다.
생성창이 뜨면 제목을 입력하고 공개 여부를 선택한다.
만들기 버튼을 클릭하면 빈 화면이 생성된다.
엔티티 추가
엔티티란?
Entity
실체, 독립체라는 뜻으로 데이터 모델링에서 사용되는 객체이다.
데이터의 집합을 의미하는 것으로, 데이터베이스 테이블이라고 생각하면 된다.
ERD에서 가장 기본이 되는 단위라고 할 수 있다.
엔티티의 특징은 다음과 같다.
- 유일한 식별자를 가져야 한다.
- 2개 이상의 인스턴트가 있어야 한다.
- 반드시 속성을 가져야 한다.
- 다른 엔티티와 최소 한 개 이상의 관계를 맺어야 한다.
좌측에 엔티티 추가 버튼이 있다.
클릭한다.
요소가 생성된다.
처음에는 텍스트 두 칸만 뜨는데, 엔티티의 이름이다.
왼쪽은 논리적 이름, 오른쪽은 물리적 이름 칸이다.
논리적 이름은 설계시 알아보기 쉽도록 적으면 된다.
물리적 이름은 테이블명이다.
기본키(Primary Key)
기본키란?
Primary key
주 키, 프라이머리 키, PK 등으로 불린다.
후보키 중 메인으로 선정되는 키로, 후보키의 성질을 갖는다.
유일성과 최소성을 가지며(후보키), 해당 레코드를 식별할 때 기준이 되므로 반드시 필요하다.
기본키는 다음과 같은 조건을 따른다.
- 값의 변동이 잦은 후보키는 기본키로 부적절하다.
- NULL 값을 가질 수 있는 속성이 포함된 후보키는 부적절하다.
- 후보키 중 단순한 키를 기본키로 선택한다.
- 하나의 테이블에는 반드시 하나의 기본키만 존재한다.
예를 들어 '사용자' 엔티티에 동명이인 데이터가 들어갈 수 있다.
'김철수'가 두 명, 세 명 있을 수 있는 것이다.
그런 경우에 각 '김철수'가 다른 사람이라는 것을 구별할 기준이 필요하다.
그 기준이 기본키이다.
기본키는 노란색 + 버튼을 클릭하면 생성된다.
기본키에는 보통 자연수값을 넣는다.
들어간 순서대로 1, 2, 3... 같은 번호를 할당하는 것이다.
날짜와 숫자를 조합하거나, 랜덤 문자열인 UUID를 할당하기도 한다.
속성 추가
속성은 해당 엔티티의 구성 요소로써 분리되지 않는 단위이다.
파란색 + 버튼으로 추가할 수 있다.
속성 정보를 변경하고 싶을 때는
해당 속성을 클릭한 후
정보 버튼을 클릭한다.
null 허용이 흰색으로 채워지면 NOT NULL이다.
1:N 관계
사용자에게 게시물에 대한 정보를 추가해 보자.
관계성에 대한 이해가 없다면
'사용자' 엔티티에 '게시물' 속성을 추가할 수도 있을 것이다.
그렇게 하면 사용자가 게시물을 추가할 때마다 엔티티 속성이 늘어나게 된다.
일반적인 방법은 다음과 같다.
게시물 엔티티를 별도로 분리하고,
'사용자' 엔티티와 '게시물' 엔티티에 관계를 부여하는 것이다.
게시물 엔티티를 만들고, 기본키와 속성을 추가한 뒤
사용자와 게시물을 연결한다.
연결 버튼을 클릭하고
사용자 엔티티를 클릭한 뒤
게시물 엔티티를 클릭한다.
식별 관계를 선택하는 창이 뜨면 비 - 식별 관계를 클릭한다.
식별 관계/비식별 관계란?
식별 관계
Identifying Relationship
- 부모 테이블(사용자) 기본키가 자식 테이블(게시물)의 외래키이자 기본키로 사용되는 관계이다.
- 자식 테이블의 행(정보)을 추가할 때 부모 테이블의 참조 행(고유값)이 없다면 자식 테이블의 행을 추가할 수 없다.
- 게시판의 게시물과 댓글을 식별 관계라고 할 수 있다. 게시물이 없다면 댓글도 있을 수 없다.
비식별 관계
Non - Identifying Relationship
- 부모 테이블(사용자) 기본키가 자식 테이블(게시물)의 일반칼럼이나 외래키 칼럼에 저장되는 관계이다.
- 자식 테이블의 행(정보)를 추가할 때 부모 테이블의 참조 행(고유값)이 없어도 자식 테이블의 행을 추가할 수 있다.
- 회사의 부서와 사원의 관계를 비식별 관계라고 할 수 있다. 사원에게 부서가 배정되지 않을 수도 있다.
연결된 모습을 볼 수 있다.
분홍색 선은 사용자 한 명 당 0개 혹은 하나 이상의 게시물이 대응될 수 있다는 의미다.
게시물은 추가된 '고유값' 속성을 통해 해당 '사용자' 엔티티에 접근할 수 있다.
SQL 추출하기
ERDCloud와 같은 도구들은 SQL 추출 기능을 제공한다.
설계한 ERD를 기반으로 테이블 생성 SQL을 뽑아 주는 것이다.
좌측 하단의 내보내기 버튼을 클릭한다.
원하는 데이터베이스 종류를 고르고
기타 옵션을 선택한 다음
SQL 미리보기 버튼을 클릭한다.
만들어진 SQL이 뜰 것이다.
CREATE TABLE `user` (
`id` INT NOT NULL,
`username` VARCHAR(255) NOT NULL,
`password` VARCHAR(255) NOT NULL,
`nickname` VARCHAR(255) NOT NULL,
`email` VARCHAR(255) NOT NULL,
`created_date` VARCHAR(255) NOT NULL,
`modified_date` VARCHAR(255) NOT NULL
);
CREATE TABLE `posts` (
`id` INT NOT NULL,
`title` VARCHAR(255) NOT NULL,
`content` TEXT NOT NULL,
`writer` VARCHAR(255) NOT NULL,
`view` INT NOT NULL,
`created_date` VARCHAR(255) NOT NULL,
`modified_date` VARCHAR(255) NOT NULL,
`user_id` INT NOT NULL
);
CREATE TABLE `comments` (
`id` INT NOT NULL,
`comment` TEXT NOT NULL,
`created_date` VARCHAR(255) NOT NULL,
`modified_date` VARCHAR(255) NOT NULL,
`posts_id` INT NOT NULL,
`user_id` INT NOT NULL
);
ALTER TABLE `user` ADD CONSTRAINT `PK_USER` PRIMARY KEY (
`id`
);
ALTER TABLE `posts` ADD CONSTRAINT `PK_POSTS` PRIMARY KEY (
`id`
);
ALTER TABLE `comments` ADD CONSTRAINT `PK_COMMENTS` PRIMARY KEY (
`id`
);
참고한 글
https://blog.naver.com/PostView.naver?blogId=sssang97&logNo=222808912681
https://velog.io/@kjhxxxx/DataBase-ERD%EB%9E%80
'MySQL' 카테고리의 다른 글
MySQL/mysql workbench가 실행되지 않을 때 (0) | 2023.10.10 |
---|---|
[mariaDB] 마리아DB 설치 (1) | 2023.10.10 |
MySQL 휴대폰 번호에 하이픈(-) 삽입/CASE 문법/조건에 따른 결괏값 반환 (0) | 2023.05.17 |