Entity Relationship Diagrams | Mermaid
엔티티와 관계
<엔티티1> [<관계> <엔티티2> : <관계 이름>]
으로 구성됨.
- 엔티티1 : 엔티티 명이며 영문자나
_
로 시작해야 하며, 숫자와-
를 포함할 수 있다. - 관계 : 두 엔티티 간의 상호 관계를 나타낸다.
- 엔티티2 : 다른 엔티티명.
- 관계 이름 : 엔티티1의 관점에서의 관계를 나타낸다.
HOUSE ||--|{ ROOM : contains
를 살펴보자.
위 예제는 “집은 하나 이상의 방을 포함할 수 있고, 방은 반드시 하나의 집에만 포함될 수 있다”로 해석된다. 위의 관계명은 엔티티1의 관점인 것을 확인할 수 있다. 엔티티2의 관점에서 봤을 때 동등 라벨은(?)은 추론하기 매우 쉽다.
위 문법의 <엔티티1>
부분만 필수이다. 이를 통해 관계가 없는 엔티티를 보여줄 수 있는데 다이어그램을 반복적으로 생성할 때 유용하다. 만약 뒷 부분 중 아무 부분이라도 넣게 된다면 모든 부분을 작성해야 한다.
관계 문법
각 문장의 관계 부분은 크게 3개로 나뉠 수 있다.
- 엔티티2의 관점에서 엔티티1의 cardinality
- 관계가 ‘자식’ 엔티티에 대해 신원을 부여하는지 여부
- 엔티티1의 관점에서 엔티티2의 cardinality
cardinality는 다른 엔티티의 요소가 해당 엔티티와 얼마나 연관될 수 있는지를 설명하는 속성이다. 위에서 다룬 예시에서는 집이 하나 이상의 방과 연관될 수 있었던 반면에 방은 하나의 집에만 연관될 수 있었다.
각 cardinality 표시자는 두가지 문자로 구성된다. 엔티티와 가까운 쪽이 최대 수를 나타내며, 다른한 쪽은 최소 수를 나타낸다.
엔티티1 기준 | 엔티티2 기준 | 의미 |
---|---|---|
|o | o| | 없거나 최대 하나 |
|| | || | 반드시 하나 |
}o |
o{ |
없거나 하나 이상 |
}| | |{ | 하나 이상 |
Mermaid ERD에서는 多쪽에 limit을 제공하지 않는다.
식별 관계
부모 테이블의 키를 자식 테이블이 기본 키로 사용하는가? ⇒ 식별(O) VS 비식별(X)
관계는 식별 또는 비식별 관계로 분류될 수 있고 이는 실선과 점선으로 표시된다. 이는 해당 엔티티가 다른 엔티티 없이는 존재할 수 없는 종속적일 경우에 해당된다.
예를 들어, 사람들이 자동차를 운전할 때 보험에 가입하는 회사에서는 NAMED-DRIVER
에 대한 데이터를 저장해야할 수 있다. 모델링 단계에서는 먼저 하나의 자동차를 많은 사람들이 탈 수 있고 사람이 많은 자동차를 운전할 수 있다는 것을 관찰하는 것에서부터 시작할 수 있다. 두 개체는 서로 없이 존재 할 수 있으므로 이는 비식별관계이고 Mermaid에서는 아래와 같이 표현할 수 있다.
PERSON }|..|{ CAR : "driver"
위 표현식에서 ..
은 두 엔티티간의 관계를 표현할 때 점선으로 나타난다. 하지만 이 다대다 관계가 두 개의 일대다 관계로 나누면 NAMED-DRIVER
는 사람과 차 둘 다 없이는 존재하지 못하는 식별관계인 것을 알 수 있다. 그렇기 때문에 --
을 이용해 실선으로 표시하게 된다.
erDiagram
CAR ||--o{ NAMED-DRIVER : allows
PERSON ||--o{ NAMED-DRIVER : is
속성
속성은 {}
안에 여러 [자료형] [이름]
쌍으로 구성될 수 있다. 속성은 엔티티의 범위 안에 표시된다.
erDiagram
CAR ||--o{ NAMED-DRIVER : allows
CAR {
string registrationNumber
string make
string model
}
PERSON ||--o{ NAMED-DRIVER : is
PERSON {
string firstName
string lastName
int age
}
자료형은 반드시 영문자로 시작해야 하며 숫자, -
, _
,()
, []
을 포함할 수 있다.
이름은 자료형과 비슷하나 기본 키임을 표시하기 위해 *
로 시작할 수 있다. 그 외에는 아무런 제한이 없으며, 유효한 데이터 유형의 암묵적인 집합도 존재하지 않는다.
엔티티 명 약칭(v10.5.0+)
[]
을 이용해 약칭을 추가할 수 있다. 만약 아래와 같이 약칭을 추가하면 약칭이 엔티티명으로 표시된다. 띄어쓰기를 사용해야 한다면 " "
를 활용할 수 있다.
erDiagram
p[Person] {
string firstName
string lastName
}
a["Customer Account"] {
string email
}
p ||--o| a : has
속성 키와 비고
속성은 키 또는 비고가 있을 수 있다. 키는 주요 키, 외래 키, 고유키가 있고 각각 PK
, FK
, UK
로 표시한다. 하나의 컬럼에 대해 여러 키 제약을 명시하고 싶다면 쉼표(,
) 로 이어 적는다.
비고는 큰따옴표("
)를 사용해 처음과 끝을 감싼다. 비고는 내부에 큰따옴표를 포함할 수 없다.
erDiagram
CAR ||--o{ NAMED-DRIVER : allows
CAR {
string registrationNumber PK
string make
string model
string[] parts
}
PERSON ||--o{ NAMED-DRIVER : is
PERSON {
string driversLicense PK "The license #"
string(99) firstName "Only 99 characters are allowed"
string lastName
string phone UK
int age
}
NAMED-DRIVER {
string carRegistrationNumber PK, FK
string driverLicence PK, FK
}
MANUFACTURER only one to zero or more CAR : makes
추가
관계 이름에 두 단어 이상 사용하고 싶다면 큰따옴표(”
)로 감쌀 수 있다.
관계 이름을 사용하고 싶지 않다면 ""
와 같이 큰따옴표로 감싸진 빈 문자를 사용하면 된다.
'Today I Learned' 카테고리의 다른 글
CSRF 토큰 확인 불가 문제 해결 (0) | 2024.06.29 |
---|---|
필터에 @Component 등록 시 자동 등록 (0) | 2024.06.28 |
@Default 빌더 기본값 적용 (0) | 2024.05.28 |