2020. 6. 26. 02:49ㆍBACKEND/Database
안녕하세요 〰️
이 번 포스팅에서는 여러모로 쓸모있는!
ERD를 알아보고 표기법에 대해 이야기해볼 예정입니다.
**************** INDEX *****************
💼 ERD❓
⏳ ERD, 언제 사용할까❓
🤖 ERD Notation
********************************************
💼 ERD
ERD는 Entity Relationship Diagram의 약자입니다.
ERD는 데이터베이스 구조를 한 눈에 알아보기 위해 그려놓는 다이어그램입니다.
ER Diagram이라고도 부릅니다 〰️
ERD는 단어에서 의미하는 그대로 ' Entity 개체 '와 'Relationship 관계 '를 중점적으로 표시하는 다이어그램입니다.
데이터베이스를 설계할 때, 테이블과 그 속에 정의된 여러 관계를 다이어그램으로 나타내니, 보기 굉장히 편하겠죠?
아래는 MySQL Workbench에서 예시로 보여주는 완성된 다이어그램입니다.
대충보면 어떤 건지 아시겠나요 ?
모르셔도 됩니다 〰️ 지금부터 같이 알아보도록해요 !
⏳ ERD, 언제 사용할까?
개체와 관계를 나타내는 다이어그램은 언제 사용될까요?
왜 만드는지, 언제 만드는지 알아봐야 그릴 때 의문이 안생기겠죠?
✔️ design
데이터베이스를 설계할 때, 다양한 테이블들과 해당 테이블들간의 관계들을 결정합니다.
이 때, 테이블을 하나하나 그리면서 설계하기에는 시간 효율이 굉장히 떨어지죠.
예를들어 A 테이블을 그렸는데 수정해야 한다면? 혹은, 데이터베이스 전체 설계를 마친 후 수정이 필요하다면?
우리가 생각하는대로 바로 적용하기에는 큰 무리가 있습니다.
그렇기 때문에 ERD를 사용하여 전체 데이터 베이스의 구조를 먼저 잡고 진행할 수 있습니다.
혹은, 데이터베이스를 사용하다가 수정이 필요할 때가 생길 수 있겠죠? 이 때는 데이터가 사라질 수 있으니, 굉장히 신중하게 사용해야 합니다.사용 중 수정을 할 때에도, ERD를 먼저 보고 적용해보면 어느 부분을 어떻게 수정해야 할지 비교적 쉽고 빠르게 반영할 수 있습니다.
✔️ debugging
데이터베이스를 사용하다보면 굉장히 복잡한 쿼리문을 작성해야 할 때가 생깁니다.
가령, 두 세번 이상의 JOIN이나 subquery를 사용해야 한다고 생각해보세요.
자신의 머리속에 있는 테이블들을 구조화하면서 쿼리문을 짤 수 있을까요?
홈즈라면 가능하겠지만,,,,일단 저는 못합니다 🤣
이러한 상황에도 ERD는 큰 도움을 줍니다.
구조화된 다이어그램에서 각 Entity의 속성이 바로 보이기 때문에 굉장히 간편하게 사용할 수 있게되죠.
✔️ creation and patching
ERD를 사용하다보면 굉장히 편하다는 것을 느낄 수 있는데요.
그래서 ERD를 사용하여 데이터베이스를 생성하고 수정하기도 합니다.
다양한 툴이 있을텐데, 몇가지만 이야기 해보면 MySQL Workbench나 ERWin 프로그램이나 인터넷에서 Aquerytool을 바로 사용할 수도 있습니다.
더 다양한 툴들이 있으니, 필요하다면 찾아보세요 〰️
✔️ Aid in requirements gathering
데이터 수집을 할 때, 테이터의 요구사항이나 흐름 등을 도와줄 수 있습니다.
데이터를 수집할 때, 반드시 먼저 저장되어야하는 데이터들이 생길 수 있는데요.
데이터의 흐름에 대한 도움을 받을 수 있습니다.
혹은, 데이터의 다양한 특징을 바로 볼 수 있기 때문에 그에 대한 요구사항에 맞춰 개발을 할 수 있겠죠.
위와 같이 4가지의 상황을 들어보았습니다.
자, 이제는 직접 보고 만들어보면서 ERD를 완전히 파악하는 시간을 가져보겠습니다 〰️
🤖 ERD Notation
이제부터는 ERD 표기법에 대해 알아보도록 하겠습니다.
사실, 표기법이 하나로 지정되어 있지는 않지만 가장 많이 사용되는 IE 표기법을 알아볼 예정입니다.
IE 표기법은 Information Engineering 의 약자입니다.
diagram 특성상 crow-feet 표기법이라고도 합니다. 그 이유는 금방 아시게 될 거에요 〰️
정보공학 표기 방식으로 일반적으로 모델링을 할 때 가장 많이 사용하는 유형입니다.
자, 이제부터 표기법을 알아볼 예정입니다.
✔️ Entity
Entity는 정의 가능한 사물 또는 개념을 의미합니다. 사람이나, 객체 혹은 개념이나 이벤트 등을 Entity로 둘 수 있습니다.
객체에는 가구나 자동차를 예시로 들 수 있을 것 같아요.
개념은 프로필이나 자기소개서 등이 있을 수 있겠고, 이벤트에는 거래 등이 있을 수 있습니다.
데이터베이스를 설계할 때, '테이블'이 Entity로 정의될 수 있습니다.Entity는 아래의 그림과 같이 표현됩니다.
✔️ Entity Attribute
각각의 Entity에는 속성을 포함하고 있습니다.
Attribute는 개체가 갖고있는 속성이죠.
예를 들어 사람이라면 나이, 이름, 생년월일 등을 포함할 수 있겠죠?
여기서, 하나 더 필요한 건 데이터의 타입입니다.
데이터 타입을 같이 명시해줘야 하며 이 때, RDBMS가 지원하는 타입에 맞게 적어주세요!
위의 그림은 Entity에 속성을 포함한 그림입니다.
직관적으로 느낌이 오시죠❓
✔️ Constraint - PK & NN
이번엔 제약조건을 표시해보도록 하겠습니다.
관계에 대한 자세한 사항은 이 게시글을 참고하시면 됩니다.
+ 관계에 대한 설명을 조금 더 추가해볼게요.
서점을 예시로 들어볼까요? 서점에서 새로운 책들을 구비해두려고 합니다.
그럼 서점에서는 추가할 책들을 주문하겠죠.
이 데이터를 저장한다고 생각을 해보세요. 일단 눈에 띄는 개체라고 정의할 수 있는 건 서점과 책이죠.
서점에서 책을 살 때 15000원짜리 A책을 10권 구매하고 20000만원짜리 B 책을 15권 구매한다고 했을 때,
이 데이터들은 어느 개체에 포함될 수 있을까요?
서점, 책 둘 다 포함하기 어려워요. 물론 할 수는 있겠지만 비효율적이구요. (정규화를 알아보세요)
그래서 주문데이터를 저장하는 주문 개체를 하나 만듭니다.
그럼 이 때 개체들 사이의 관계를 집중적으로 보면
한 서점에서는 여러개의 주문을 넣을 수 있고, 하나의 주문에는 여러 가지의 책을 포함할 수 있어요.
개체들 사이의 관계를 말하는 것이 바로 이번 섹션에서 다룰 부분이에요.
더 자세한 내용을 아래에 추가해두겠습니다.
먼저 PKprimary key부터 표시해볼까요❓
🔑 PK primary key
대부분 위의 그림과 같이 열쇠의 그림으로 표시해줍니다.
이 번엔 NOT NULL을 표시해보도록 합시다 〰️
❌ NOT NULL
Null 을 허용한다면, N을 적지 않으셔도 됩니다.
이번엔 가장 까다롭지만, 가장 중요한! Foreign Key에 대해 알아보도록 하겠습니다.
✔️ Constraint - FK
✈️ FK Foreign Key
Foreign key를 표시할 때에는 선을 사용하는데요.
여기서 잠깐, ERD를 표시할 때에는 두가지를 표시한다고 했습니다.
바로 개체와 관계죠.
이 때 관계가 바로 FK입니다.
일단, 관계를 어떻게 그려야 하는지 알아볼게요.
✍🏻 두 개체의 관계 - 선
먼저, 두 관계중 부모의 키를 PK로 받는지 안받는지에 따라서 선의 종류 (점 or 실) 가 다릅니다.
낯설지만 생각보다 간단한 개념인데요, 그림을 잘보시면 바로 이해하실 수 있어요.
Address 개체에서 address_id가 PK로 설정이 되어있는데 Store 개체가 address_id를 가지려고 합니다.
이 때 식별자 관계에서는 FK를 PK로 설정(🔑)을 했고,
비식별자 관계에서는 일반 속성(🔹)으로 가지고 온 것을 확인할 수 있습니다.
(FK를 PK로 사용할 수 있다는 점을 알고 있어야 조금 더 쉽게 이해할 수 있겠죠 ~)
참고로, FK를 PK로 지정할 때가 언제 있을까요?
하나의 예시로 자식 테이블에서 할아버지/할머니 테이블을 참조할 때가 있을 수 있어요.
물론, 상황에 따라 필요할 수도 있고 필요없을 수도 있습니다.
✍🏻 두 개체의 관계 - 선의 끝
Cardinality
Cardinality는 한 개체에서 발생할 수 있는 발생 횟수를 정의하며, 다른 개체에서 발생할 수 있는 발생 횟수와 연관됩니다.
1대1관계, 1대N관계, N대N 관계가 있죠.
✔️ One-to-One Cardinality
1:1 관계에서는 아래와 같이 표기합니다.
✔️ One-to-Many Cardinality
1:N 관계에서는 아래와 같이 표기합니다.
여러개가 될 수 있는 개체에는 까마귀의 발과 같이 그려줍니다.이제, 왜 crow-feet라고도 불리는 지 아시겠죠 ❓
✔️ Many-to-Many Cardinality
N:M 관계에서는 아래와 같이 표기합니다.
지금까지 Cardinality를 살펴보았는데요.
마지막으로 하나만 더 보고 마치겠습니다.
마지막으로, 필수참여 조건입니다 〰️
'|' 표시가 있는 곳은 반드시 있어야 하는 개체, 'O' 표시가 있다면 없어도 되는 개체입니다 !
inventory 개체가 없어도 store 개체는 있을 수 있고, store 개체가 없다면 inventory 개체도 있을 수 없습니다.
그럼, 이렇게 포스팅을 마치도록 하겠습니다 〰️
ERD 여러모로 필요한데 난해한 기호로 헷갈렸을 것 같아 포스팅해보았습니다 ❗️
참고 - https://www.visual-paradigm.com/guide/data-modeling/what-is-entity-relationship-diagram/
'BACKEND > Database' 카테고리의 다른 글
Database Index, 제대로 알아보기 (4) | 2021.07.30 |
---|---|
SQL, Window Function (0) | 2020.11.29 |
SQL SELECT, 제대로 사용하기 (0) | 2020.06.23 |
SQL SELECT, 제대로 사용하기 - where 조건절 (0) | 2020.06.20 |
정규화, 어렵지 않게 시작하기 (6) | 2020.06.15 |
Backend Software Engineer
𝐒𝐮𝐧 · 𝙂𝙮𝙚𝙤𝙣𝙜𝙨𝙪𝙣 𝙋𝙖𝙧𝙠