Quick DBD 후기
1.ERD (Entity Relationship Diagram)란 무엇인가?
-한국말로 직역하자면 개체-관계 다이어그램이다.
-쉽게 생각하면, 테이블간의 관계를 설명해주는 다이어그램이라고 볼 수 있으며, 이를 통해 프로젝트에서 사용되는 DB 의 구조를 한눈에 파악할 수 있다. 즉, API를 효율적으로 뽑아내기 위한 모델 구조도라고 생각하면 된다.
-ERD는 전략적 계획이나 또는 하향식 계획에서 자주 사용되며, 개략적인 상부계층의 데이터 다이어그램이다. 데이터의 하향식 계획은 기업을 운영하는데 관련된 실체들을 확인하고, 그것들간의 관계들을 결정한다. 기업체를 효율적으로 운영하기 위해서는 어느 정도의 데이터가 필요하게 되는데, 이러한 데이터는 컴퓨터가 사용되지 않아도 상관은 없지만, 컴퓨터는 정확한 데이터를 필요한 사람에게 정확하게 전달하는데 큰 도움을 준다. 문제가 되는 데이터는 정연하고, 자세히 설명될 필요가 있으므로, 이를 위해 데이터에 관한 데이터가 필요하다. 데이터에 관한 데이터를 흔히 메타데이터라고 부르는데, 데이터 모델들은 이러한 메타데이터를 포함하고 있다.
-데이터 분석가들은 조직의 데이터를 그들에게 이해시키고, 조직을 관리하는데 가장 유익하게될 데이터를 만들기 위해 최종사용자들 및 중역들로부터 많은 도움을 필요로 한다. 이들과의 의사소통을 원활히 하기 위해, 그들은 데이터를 도식화하는 명료한 방법이 필요하며, ERD와 같은 다이어그램은 조직의 정보자원을 전반적으로 계획하는데 있어 필수적이며 유용한 도구이다. ERD는 개발되고 나면, 좀더 자세한 데이터 모델로 분해될 수도 있다.
-Entity란 우리가 저장한 데이터에 관해 무언가 실제적이거나 추상적인 것을 모두 포함한다. Entity의 형태는 고객, 근로자, 청구서, 상품, 교대근무보고서, 영수증, 창고, 지사, 영업사원 등을 예로 들 수 있다. 각 Entity의 이름은 보통 명사(名辭)이어야하지만, 때로는 수식어구가 사용될 수도 있다. Entity 형태는 같은 속성형태를 가진 Entity들을 대표할 수 있는 이름을 붙인 일종의 부류를 나타낸다.
-예를 들어 '근로자'라는 Entity가 있다면, 그 Entity에 속하는 '홍길동'이라는 Entity 인스턴스가 존재할 수 있다. ERD에서 Entity는 직사각형으로 그리며, 각 Entity간의 관계는 좌측 그림에 예시되어 있는 것과 같은 표기방법을 이용하여 관계를 나타내게 된다
2. 개체 (Entity)
• 개념
- 시스템화 하고자 하는 사물이나 사건
- 현실 세계의 객체
- 예) 사원, 부서, 남자, 도시, 계약, 물품 등
• 표기법
• 종류
- 일반 엔티티, 약 엔티티, 슈퍼 엔티티, 서브 엔티티
3. 관계성 (Relationship)
• 정의
- 개체간의 연관성을 나타낸다.
예) 소속된다. 관리된다. 소유한다. 등
• 표기법 :
• 종류
- 관계의 종류 : 이진관계, 순환관계, 삼진관계
- 관계성 (카디널리티, Cardinality) : 1대1, 1대N, N대N
4. 속성 (Attribute)
• 정의
• 표기법
• 종류 : 일반속성, 키속성, 다중값 속성, 복합속송, 유도속성
5.ERD Notation
ERD에는 여러 기호들로 관계를 표현할 수 있으나, 기호들만 숙지하여도 충분히 표현 가능하다.
상기에 나와있는 기호들을 하나하나씩 살펴보자.
1. One
일대일 혹은 일대다 관계이다. 주로 하나의 외래키가 걸린 관계라고 보면 된다.
2. Many
다대다 관계이다. 중계 테이블을 통하여 여러개의 데이터를 바라보고 있을때 사용한다.
3. One (and only one)
위의 조건과 동일하게 일대일 관계이나, 하나의 row끼리만 연결된 데이터이다.
4. Zero or one
일대일 혹은 일대 다 관계를 가지고 있으나, 필수 조건이 아님을 의미한다. 비유를 하자면 개인정보 동의시, 필수값 구분과 선택값 구분이라고 보면 될 것 같다.
5. One or Many
일대일 혹은 다대다 관계를 가지고 있음을 의미한다. 관계를 가지고 있으나, 참조되는 row값들이 불명확함을 의미한다.
6. Zero or Many
참조하는 테이블과의 관계가 불명확한 경우이다. 장바구니처럼 row 생성값이 없을수도, 하나일수도, 여러개일 수도 있는 경우이다.
ERD, 언제 사용할까?
design
데이터베이스를 설계할 때, 다양한 테이블들과 해당 테이블들 간의 관계들을 결정한다.
이 때, 테이블을 하나하나 그리면서 설계하기에는 시간 효율이 굉장히 떨어지곤 한다. 예를 들어, A 테이블을 그렸는데 수정해야 한다면? 혹은, 데이터베이스 전체 설계를 마친 후 수정이 필요하다면?
우리가 생각하는 대로 바로 적용하기에는 큰 무리가 있다. 혹은, 데이터베이스를 사용하다가 수정이 필요할 때, 바로 수정하게 되면 데이터가 사라질 수 있으니, 신중하게 해야 한다. 그렇기 때문에 ERD를 사용하여 전체 데이터베이스의 구조를 먼저 잡고 진행할 수 있다. ERD를 먼저 보고 적용해보면 어느 부분을 어떻게 수정해야 할지 비교적 쉽고 빠르게 반영할 수 있다.
debugging
데이터베이스를 사용하다 보면 굉장히 복잡한 쿼리문을 작성해야 할 때가 생긴다. 예를 들어, 두 세 번 이상의 JOIN이나 subquery를 사용해야 한다고 했을 때, 테이블을 머릿속에서 구조화하면서 쿼리문을 짤 수 있을까?
머리가 좋으면 가능하겠지만 나는 불가능하기 때문에 ERD에게 큰 도움을 받는다. 구조화된 다이어그램에서 각 Entity의 속성이 바로 보이기 때문에 굉장히 간편하게 사용할 수 있게 된다.
Quick DBD란
-ERD 를 웹에서 빠르고 편하게 작성할 수 있는 서비스이다.
-우선 소개를 하자면, QuickDBD는 매우 유익한 다이어그램 기능을 제공하는 무료 온라인 브라우저 기반 다이어그램 작성 도구이다. 사용자는 이 소프트웨어를 사용하여 작업 및 데이터를 쉽고 적절하게 가져오고 내보낼 수 있다.
QuickDBD 다이어그램 소프트웨어를 사용하면 스키마만 입력하여 데이터베이스 다이어그램을 만드는 것이 가능하다. 드래그 앤 드롭 기능은 경험이 부족한 사용자도 쉽게 도표를 작성할 수 있도록 도와준다.
이 소프트웨어는 실시간으로 여러 사람이 단일 다이어그램 또는 흐름도를 온라인으로 동시에 편집할 수 있는 다중 사용자 협업을 지원하기도 한다.
또한, 템플릿을 사용하여 도표를 작성할 때 편리하다. QuickDBD을 통해 조직 차트 작성, 마인드 맵 및 흐름도를 이용할 수 있다.
- 왼쪽 테이블에 정의한 테이블이 오른쪽에 시각화 되어서 데이터의 구조를 바로 확인할 수 있다. 데이터를 시각할 뿐만 아니라 표의 위치도 자율적으로 변경할 수 있어서 의도하지 않은 구조가 되었을 때 쉽게 수정 가능하다. 또한, 위에서 보다시피 private한 정보를 PK(private key) 로 간편하게 설정할 수 있는 점이 좋은 것 같다. 아직 데이터 베이스를 설계하고 서버를 구축한 프로젝트를 해본 적이 없지만, 무료 체험을 해보면서 QuickDBD를 활용해서 ERD를 만들 때 매우 큰 도움이 될 것이라는 기대감이 생겼다.
작성한 ERD에 대해 SQL 파일로 추출하고 싶다면, EXPORT 탭에서 원하는 DB(ANSI SQL, MySQL/MariaDB, Oracle, PostgreSQL, SQL Server)에 맞춰 추출이 가능하다. 물론, SQL 파일 뿐만 아니라 PDF Documentation, RTF (Word) Documentation 같은 문서로도 내보내기가 가능하며, PNG Image, SVG File 같은 이미지로도 내보내기가 가능하다.
로그인이 되어 있는 상태에선 링크를 외부로 공유까지 가능하다.
File -> Private 버튼을 누르면 가능하다.
-데이터 베이스에 대한 공부를 하던 중 ERD에 대해 공부하게 되었다. 그러던 중 지인한테 ERD를 편하게 구현 할 수 있는 프로그램을 추천받았는데 그것이 Quick DBD이다. Quick DBD에 대해 조사를 하다 보니 Quick DBD를 무료로 이용할 수는 있지만 간단한 review를 작성하면 1년 동안 Pro 버전으로 무료로 사용할 수 있게 해준다고 한다. 주의할 점은 블로그에 후기를 500단어 이상 적어야 한다. 처음에 500글자 인줄 알았는데 생각보다 양이 많아서 놀랐다. 그 다음 Quick DBD의 장점에 대해서 알아보았다.
- 좌측의 코드를 수정하여 우측의 데이터들을 제어할 수 있으며, Entity들의 경우 마우스 드래그를 통해 원하는 위치에 지정시킬 수 있다.
테이블의 내부 정보중 열쇠모양이 있는데 저것은 Primary key를 표시한것이다. 이처럼 한눈에 데이터베이스의 구조와 내부 데이터들 정보까지 확인할 수 있는 편한 툴 인것 같다.
- 상단의 EXPORT를 통해 sql 데이터를 추출하여 다른 프로그램에서 사용하능하다. 또한 추출을 이미지 파일이나 pdf파일로도 추출이 가능하여 편리하게 다양한곳에 사용가능하다.
또한 IMPORT를 통해 다른곳에서 사용한 sql데이터를 가져와 시각화 및 데이터 수정 구조 이해 등이 가능하다.
QuickDBD를 통해 훨신 쉽고 편하게 DB설계가 가능하고 개발중 수정이나 데이터 삭제 또한 매우 쉽게 가능할것으로 보인다.
1)Quick DBD 장점
- 편리함 : 심플한 UI와 부드러운 UX로 사용하기가 편하다.
- 접근성 : 사용하기가 편해서 툴을 쉽게 익힐 수 있다.
- 스키마 코드와 ERD 다이어그램을 한번에 볼 수 있다.
- Export 탭을 누르면 다양한 파일명으로 변환하여 Export할 수 있다. 현재 SQL로는 ANSI SQL, MySQL/MariaDB, Oracle(12c+), PostgreSQL, SQL server를 지원하며 이 외에도 PDF나 워드 파일, 그리고 PNG나 SVG같은 이미지 파일로도 변환하여 추출 가능하다. 반대로 다른 SQL 파일로부터 Import 받아 올 수도 있다.
- 아래는 코드 예시이다
# Modify this code to update the DB schema diagram.
# To reset the sample schema, replace everything with
# two dots ('..' - without quotes).
# Customer
# -
# CustomerID PK int
# Name string INDEX
# Address1 string
# Address2 NULL string
# Address3 NULL string
# Order
# -
# OrderID PK int
# CustomerID int FK >- Customer.CustomerID
# TotalAmount money
# OrderStatusID int FK >- os.OrderStatusID
# OrderLine as ol
# ----
# OrderLineID PK int
# OrderID int FK >- Order.OrderID
# ProductID int FK >- p.ProductID
# Quantity int
# # Table documentation comment 1 (try the PDF/RTF export)
# Product as p # Table documentation comment 2
# ------------
# ProductID PK int
# # Field documentation comment 1
# # Field documentation comment 2
# Name varchar(200) UNIQUE # Field documentation comment 3
# Price money
# OrderStatus as os
# ----
# OrderStatusID PK int
# Name UNIQUE string
# kakao====================================
# User
# ----
# userIdx pk int identity
# # pk:primary key
# # int: data type
# # identity: auto order
# name varchar(30)
# email varchar(50)
# profileImgUrl text null # use text only URL
# # Image can be null
# backgroundImgUrl text null
# status varchar(10) default='ACTIVE'
# createAt timestamp default=CURRENT_TIMESTAMP
# updateAt timestamp default=CURRENT_TIMESTAMP
# Room
# ----
# roomIdx pk int identity
# name varchar(20)
# imgUrl text null
# status varchar(10) default='ACTIVE'
# createAt timestamp default=CURRENT_TIMESTAMP
# updateAt timestamp default=CURRENT_TIMESTAMP
# Chat
# ----
# chatIdx pk int identity
# roomIdx int FK >- Room.roomIdx
# message text
# status varchar(10) default='ACTIVE'
# createAt timestamp default=CURRENT_TIMESTAMP
# updateAt timestamp default=CURRENT_TIMESTAMP
# Member
# -----
# memberIdx pk int identity
# roomIdx int
# userIdx int
# status varchar(10) default='ACTIVE'
# createAt timestamp default=CURRENT_TIMESTAMP
# updateAt timestamp default=CURRENT_TIMESTAMP
# dangGeunMarket==============================
Product
----
productIdx pk int identity
productImgUrl text null
productName varchar(20) null
productLocation varchar(20) null
productUpdateAt timestamp default=CURRENT_TIMESTAMP null
productPrice int null
userIdx int FK >- User.userIdx null
status varchar(10) default='ACTIVE'
createAt timestamp default=CURRENT_TIMESTAMP
updateAt timestamp default=CURRENT_TIMESTAMP
ProductExplain
----
productExpainIdx pk int identity
productIdx int FK >- Product.productIdx null
userIdx int FK >- User.userIdx null
productImgUrl text null
userImgUrl text null
userName varchar(20) null
userLocation varchar(20) null
productName varchar(20) null
productExpain varchar(50) null
productPrice int null
status varchar(10) default='ACTIVE'
createAt timestamp default=CURRENT_TIMESTAMP
updateAt timestamp default=CURRENT_TIMESTAMP
User
----
userIdx pk int identity
userImgUrl text null
userName varchar(50) null
userLocation varchar(50) null
userMannerHeat int null
userBadgeCount varchar(50) null
productCount varchar(50) null
status varchar(10) default='A'
createAt timestamp default=CURRENT_TIMESTAMP
updateAt timestamp default=CURRENT_TIMESTAMP
Users
----
userIdx pk int identity
email varchar(100) null
password varchar(200) null
userImgUrl text null
nickname varchar(50) null
userMannerHeat int null
userBadgeCount varchar(50) null
productCount varchar(50) null
status varchar(10) default='A'
createAt timestamp default=CURRENT_TIMESTAMP
updateAt timestamp default=CURRENT_TIMESTAMP
Room
----
roomIdx pk int identity
userIdx int FK >- Product.productIdx null
userImgUrl text null
userName varchar(20) null
location varchar(20) null
lastMessage varchar(50) null
lastMessageTime timestamp default=CURRENT_TIMESTAMP
productImgUrl text null
status varchar(10) default='ACTIVE'
createAt timestamp default=CURRENT_TIMESTAMP
updateAt timestamp default=CURRENT_TIMESTAMP
Chat
----
chatIdx pk int identity
roomIdx int FK >- Room.roomIdx null
message varchar(20) null
userIdx int FK >- Product.productIdx null
status varchar(10) default='ACTIVE'
createAt timestamp default=CURRENT_TIMESTAMP
updateAt timestamp default=CURRENT_TIMESTAMP
Badge
----
badgeIdx pk int identity
badgeName varchar(20) null
badgeImgUrl text null
userIdx int FK >- Product.productIdx null
active varchar(10) null
status varchar(10) default='ACTIVE'
createAt timestamp default=CURRENT_TIMESTAMP
updateAt timestamp default=CURRENT_TIMESTAMP
Sold
----
productRoomIdx pk int identity
productRoomImgUrl text null
productRoomName varchar(20) null
productLocation varchar(20) null
productUpdateAt timestamp default=CURRENT_TIMESTAMP
productStatus varchar(20) null
status varchar(10) default='ACTIVE'
createAt timestamp default=CURRENT_TIMESTAMP
updateAt timestamp default=CURRENT_TIMESTAMP
Manner
----
mannerIdx pk int identity
mannerName varchar(20) null
mannerCount int null
status varchar(10) default='ACTIVE'
createAt timestamp default=CURRENT_TIMESTAMP
updateAt timestamp default=CURRENT_TIMESTAMP
Life
----
lifeIdx pk int identity
lifeMessage varchar(20) null
userName varchar(20) null
lifeLocation varchar(20) null
lifeUpdateAt timestamp default=CURRENT_TIMESTAMP
status varchar(10) default='ACTIVE'
createAt timestamp default=CURRENT_TIMESTAMP
updateAt timestamp default=CURRENT_TIMESTAMP
Lifechat
----
lifeIdx int FK >- Life.lifeIdx
lifeUserName varchar(20) null
userLocation varchar(20) null
lifeUpdateAt timestamp default=CURRENT_TIMESTAMP
lifeMessage varchar(20) null
lifeChatIdx pk int identity
userImgUrl text null
lifeChatUserName varchar(20) null
lifeChatMessage varchar(50) null
lifeChatUpdateAt timestamp default=CURRENT_TIMESTAMP
status varchar(10) default='ACTIVE'
createAt timestamp default=CURRENT_TIMESTAMP
updateAt timestamp default=CURRENT_TIMESTAMP
Quick DBD Pro 버전 free 권한 받기
- Quick DBD 간단하게 사용해본다.
- 블로그에 review 작성한다. (500단어 이상, 500자 아님)
- promo@quickdbd.com 으로 free 권한을 원한다는 이메일 보낸다.
- promo@quickdbd.com으로부터 확인 메일을 받는다.
- 해당 이메일로 Quick DBD에 로그인하여 등록한다.
- 등록 후에 확인 이메일을 받는다.
- Quick DBD에 들어가서 오른쪽 상단에 email을 클릭하여 Account에 접속한다.
- Pro plan Expires on, Email Confirmed 부분을 확인한다.
- Quick DBD Pro 버전을 1년 동안 이용한다.
#참고
https://velog.io/@ecvheo1/Quick-DBD-%ED%9B%84%EA%B8%B0
https://velog.io/@narnarr/Quick-DBD-%EC%82%AC%EC%9A%A9-%ED%9B%84%EA%B8%B0
https://blog.naver.com/PostView.nhn?blogId=dktmrorl&logNo=220475357522
https://choiseungyoun.github.io/posts/what-is-erd/
https://pw4ngc0.tistory.com/m/199
https://velog.io/@chloe37/QuickDBD-%EC%82%AC%EC%9A%A9%ED%9B%84%EA%B8%B0