Dayagram ng ER
Ang entity relationship diagram (dinaglat na ER diagram) ay naglalarawan ng magkakaugnay na bagay ng interes sa isang partikular na larangan ng kaalaman. Ang isang basic na ER diagram ay binubuo ng entity type (na ginagamit upang ikategorya ang bagay ng interes), at tinutukoy ang mga relasyon na maaaring umiral sa pagitan ng mga entity (ang mga instance ng entity type na ito),Tandaan, sa aktwal na paggamit ng ER diagram, halos palaging pinaiikli ang 'entity type' bilang 'entity'. Halimbawa, ang 'CUSTOMER entity type' ay karaniwang direktang tinatawag na 'CUSTOMER entity'. Napakakaraniwan ng gawaing ito, kaya hindi inirerekomenda ang ibang paraan, ngunit sa teknikal na pananaw, ang entity ay abstract na instance ng entity type, at ang ER diagram ay nagpapakita ng mga abstract na instance na ito at ang mga relasyon sa pagitan nila. Ito ang dahilan kung bakit ang entity ay palaging pinangalanan gamit ang isang singular na pangngalan.
Kopyahin
Embed
---
title: Order example
---
erDiagram
CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ LINE-ITEM : contains
CUSTOMER }|..|{ DELIVERY-ADDRESS : uses
Ang pangalan ng entity ay karaniwang naka-capitalize, bagaman walang kinikilalang standard para dito, at hindi rin ito sapilitan ng Mermaid syntax.
Ang relasyon sa pagitan ng mga entity ay kinakatawan ng linya na may endpoint marker na nagpapakita ng cardinality. Ginagamit ng Mermaid ang pinakasikat na crow's foot notation, ang crow's foot ay biswal na nagpapakita na ang entity na kinokonektahan nito ay maaaring may maraming instance.
Ang ER diagram ay maaaring gamitin sa iba't ibang layunin, mula sa abstract na logical model na walang anumang detalye ng implementasyon, hanggang sa pisikal na modelo ng relational database table. Ang pagsasama ng attribute definition sa ER diagram ay tumutulong sa pag-unawa sa layunin at kahulugan ng entity, ang mga attribute definition na ito ay hindi kailangang maging kumpleto, kadalasan ang isang maliit na bahagi ng attribute ay sapat na. Pinapayagan ng Mermaid na tukuyin ang mga ito sa kanilang type at pangalan.
Kopyahin
Embed
erDiagram
CUSTOMER ||--o{ ORDER : places
CUSTOMER {
string name
string custNumber
string sector
}
ORDER ||--|{ LINE-ITEM : contains
ORDER {
int orderNumber
string deliveryAddress
}
LINE-ITEM {
string productCode
int quantity
float pricePerUnit
}
Kapag nagsasama ng attribute sa ER diagram, kailangan mong magpasya kung isasama ang foreign key bilang attribute, maaaring depende ito sa kung gaano mo nais ipakita ang relational table structure. Kung ang iyong diagram ay isang logical model, at hindi nilalayon na magpahiwatig ng relational implementation, mas mabuti na huwag isama ang mga attribute na ito, dahil ang association ay naghahatid na ng paraan ng pagkakaugnay sa pagitan ng mga entity. Halimbawa, ang JSON data structure ay maaaring gumamit ng array upang ipatupad ang one-to-many na relasyon nang walang foreign key attribute. Katulad nito, ang object-oriented na programming language ay maaaring gumamit ng pointer o reference sa collection. Kahit para sa mga modelong nilalayon para sa relational implementation, maaaring isaalang-alang na ang pagsasama ng foreign key attribute ay inuulit ang impormasyong ipinapakita ng relasyon, at hindi nagdaragdag ng kahulugan sa entity.
Syntax
Entity at relasyon
Ang Mermaid syntax ng ER diagram ay compatible sa PlantUML, at pinalawak ang feature para sa pagmamarka ng relasyon. Ang bawat statement ay kinabibilangan ng sumusunod:
Kopyahin
Embed
<first-entity> [<relationship> <second-entity> : <relationship-label>]
- Ang first-entity ay ang pangalan ng unang entity. Ang pangalan ay sumusuporta sa anumang Unicode character, at kung napapalibutan ng double quotes, maaari itong maglaman ng espasyo.
- Ang relationship ay naglalarawan ng mutual na relasyon sa pagitan ng dalawang entity.
- Ang second-entity ay ang pangalan ng isa pang entity.
- Ang relationship-label ay naglalarawan ng relasyon mula sa pananaw ng unang entity.
Halimbawa:
Kopyahin
Embed
PROPERTY ||--|{ ROOM : contains
Ang declaration ay maaaring unawain bilang: ang isang property ay naglalaman ng isa o higit pang kuwarto, at ang isang kuwarto ay kabilang lamang sa isang property. Ang label dito ay mula sa pananaw ng unang entity: ang isang property ay naglalaman ng isang kuwarto, ngunit ang isang kuwarto ay hindi naglalaman ng property. Mula sa pananaw ng pangalawang entity, ang katumbas na label ay kadalasang madaling mahihinuha.
Ang bahagi lamang ng first-entity ang mandatory. Ginagawa nitong posible na ipakita ang entity na walang relasyon, na lubhang kapaki-pakinabang kapag paulit-ulit na gumagawa ng chart. Kung tinukoy ang iba pang bahagi ng statement, lahat ng bahagi ay mandatory.
Unicode text
Sinusuportahan ng pangalan ng entity, relasyon, at attribute ang unicode text.
Kopyahin
Embed
erDiagram
"This ❤ Unicode"
Syntax ng relasyon
Ang bahagi ng relasyon ng bawat statement ay maaaring hatiin sa tatlong subpart:
- Ang cardinality ng unang entity na may kaugnayan sa pangalawang entity
- Kung ang relasyon ay nagbibigay ng identity sa child entity
- Ang cardinality ng pangalawang entity na may kaugnayan sa unang entity
Ang cardinality ay isang attribute na ginagamit upang ilarawan ang bilang ng mga elemento na maaaring maiugnay sa ibang entity na kasangkot. Sa halimbawa sa itaas, ang isang PROPERTY ay maaaring maiugnay sa isa o higit pang ROOM instance, at ang isang ROOM ay maaari lamang maiugnay sa isang PROPERTY. May dalawang karakter sa bawat cardinality marker, ang pinakalabas na karakter ay kumakatawan sa maximum, at ang pinakaloob na karakter ay kumakatawan sa minimum. Ang talahanayan sa ibaba ay nagbubuod ng mga posibilidad ng cardinality:
| Value (kaliwa) | Value (kanan) | Kahulugan |
|---|---|---|
| |o | o| | Zero o isa |
| || | || | Eksaktong isa |
| }o | o{ | Zero o higit pa (walang limitasyon) |
| }| | |{ | Isa o higit pa (walang limitasyon) |
| Value (kaliwa) | Value (kanan) | Kahulugan |
|---|---|---|
| one or zero | one or zero | Zero o isa |
| zero or one | zero or one | Zero o isa |
| one or more | one or more | Isa o higit pa |
| one or many | one or many | Isa o higit pa |
| many(1) | many(1) | Isa o higit pa |
| 1+ | 1+ | Isa o higit pa |
| zero or more | zero or more | Zero o higit pa |
| zero or many | zero or many | Zero o higit pa |
| many(0) | many(0) | Zero o higit pa |
| 0+ | 0+ | Zero o higit pa |
| only one | only one | Eksaktong isa |
| 1 | 1 | Eksaktong isa |
Identifying
Ang relasyon ay maaaring hatiin sa identifying at non-identifying, na ini-render gamit ang solid line o dashed line ayon sa pagkakabanggit. Mahalaga ito kapag ang isa sa mga entity ay hindi maaaring umiral nang independente kung wala ang isa pa. Halimbawa, ang isang kumpanyang nagbibigay ng insurance para sa mga taong nagmamaneho ng kotse ay maaaring kailangang mag-imbak ng data ng NAMED-DRIVER. Sa pagmomodelo, maaari nating unang mapansin na ang isang CAR ay maaaring maneho ng maraming PERSON, at ang isang PERSON ay maaaring magmaneho ng maraming CAR, pareho silang maaaring umiral nang wala ang iba, kaya ito ay isang non-identifying na relasyon, at maaari nating tukuyin sa Mermaid bilang: PERSON }|..|{ CAR : "driver". Tandaan ang dalawang punto sa gitna ng relasyon, magreresulta ito sa pagguhit ng dashed line sa pagitan ng dalawang entity. Gayunpaman, kapag ang many-to-many na relasyon na ito ay na-resolve sa dalawang one-to-many na relasyon, mapapansin natin na ang NAMED-DRIVER ay hindi maaaring umiral kung wala ang PERSON at CAR. Ang mga relasyong ito ay naging identifying relations, at kinakatawan gamit ang gitling, na tumutugma sa isang solid line:
| Value | Alias |
|---|---|
| -- | Identifying |
| .. | Non-identifying |
| Value | 别名为 |
|---|---|
| to | Identifying |
| optionally to | Non-identifying |
Kopyahin
Embed
erDiagram
CAR ||--o{ NAMED-DRIVER : allows
PERSON }o..o{ NAMED-DRIVER : is
Kopyahin
Embed
erDiagram
CAR ||--o{ NAMED-DRIVER : allows
PERSON }o--o{ NAMED-DRIVER : is
Attribute
Maaari mong tukuyin ang attribute para sa entity sa pamamagitan ng pagtukoy ng pangalan ng entity, pagkatapos ay sundutin ng isang block na naglalaman ng maraming type name, kung saan ang block ay napapalibutan ng isang curly brace {}. Ang mga attribute ay ipapakita sa loob ng entity box, halimbawa:
Kopyahin
Embed
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
}
Ang type value ay dapat magsimula sa isang alphabetic na karakter, at maaaring maglaman ng numero, hyphen, underscore, parenthesis, at square brackets. Ang name value ay sumusunod sa katulad na format ng type, ngunit maaari rin itong magsimula sa asterisk, bilang isa pang opsyon upang ipahiwatig na ang attribute ay primary key. Bukod dito, walang ibang limitasyon, at walang implicit na set ng valid na data type.
Alias ng entity
Maaari kang magdagdag ng alias sa entity gamit ang square brackets. Kung may ibinigay na alias, ang alias sa halip na ang pangalan ng entity ay ipapakita sa chart, ang alias ay sumusunod sa lahat ng parehong panuntunan ng pangalan ng entity.
Kopyahin
Embed
erDiagram
p[Person] {
string firstName
string lastName
}
a["Customer Account"] {
string email
}
p ||--o| a : has
Attribute key at komento
Maaari ring tukuyin ng attribute ang key o komento. Ang key ay maaaring primary key (PK), foreign key (FK) o unique key (UK). Upang tumukoy ng maraming key constraint sa isang attribute, paghiwalayin ang mga ito gamit ang kuwit (halimbawa, PK, FK). Ang komento ay tinutukoy ng double quotes sa dulo ng attribute, hindi maaaring maglaman ng double quote character ang komento.
Kopyahin
Embed
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 ||--o{ CAR : makes
Direksyon
Ang direction statement ay nagdedeklara ng direksyon ng chart.
Ang TB ay nagdedeklara na ang direksyon ng chart ay mula itaas pababa, maaaring baligtarin ito ng BT sa mula ibaba pataas.
Kopyahin
Embed
erDiagram
direction TB
CUSTOMER ||--o{ ORDER : places
CUSTOMER {
string name
string custNumber
string sector
}
ORDER ||--|{ LINE-ITEM : contains
ORDER {
int orderNumber
string deliveryAddress
}
LINE-ITEM {
string productCode
int quantity
float pricePerUnit
}
Ang LR ay nagdedeklara na ang direksyon ng chart ay mula kaliwa pakanan, maaaring baligtarin ito ng RL sa mula kanan pakaliwa.
Kopyahin
Embed
erDiagram
direction LR
CUSTOMER ||--o{ ORDER : places
CUSTOMER {
string name
string custNumber
string sector
}
ORDER ||--|{ LINE-ITEM : contains
ORDER {
int orderNumber
string deliveryAddress
}
LINE-ITEM {
string productCode
int quantity
float pricePerUnit
}
Itakda ang estilo ng node
Maaari kang maglapat ng partikular na estilo sa node, halimbawa, mas makapal na border o ibang background color.
Kopyahin
Embed
erDiagram
id1||--||id2 : label
style id1 fill:pink,stroke:yellow,stroke-width:4px
style id2 fill:#69d,stroke:#f96,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
Maaari ka ring maglakip ng estilo sa isang listahan ng node sa isang statement:
Kopyahin
Embed
style nodeId1,nodeId2 styleList
Class
Mas madali kaysa sa pagtukoy ng estilo nang paulit-ulit ang pagtukoy ng isang style class at paglakip nito sa mga node na nangangailangan ng ibang hitsura.
Ang class definition ay tulad ng ipinapakita sa sumusunod na halimbawa:
Kopyahin
Embed
classDef className fill:pink,stroke:#333,stroke-width:4px
Maaari ka ring magtukoy ng maraming class sa isang statement:
Kopyahin
Embed
classDef firstClassName,secondClassName font-size:12pt
Ang syntax para sa paglakip ng class sa node ay ang sumusunod:
Kopyahin
Embed
class nodeId1 className
Maaari ka ring maglakip ng isang class sa isang listahan ng node sa isang statement:
Kopyahin
Embed
class nodeId1,nodeId2 className
Maaari ka ring maglakip ng maraming class nang sabay:
Kopyahin
Embed
class nodeId1,nodeId2 className1,className2
Ang madaling paraan upang magdagdag ng class ay ang paggamit ng operator ::: upang ilakip ang class name sa node, tulad ng ipinapakita sa ibaba:
Kopyahin
Embed
erDiagram
direction TB
CAR:::someclass {
string registrationNumber
string make
string model
}
PERSON:::someclass {
string firstName
string lastName
int age
}
HOUSE:::someclass
classDef someclass fill:#f96
Ang pagdedeklara ng relasyon sa pagitan ng mga entity ay maaaring gamitin ang sumusunod na syntax:
Kopyahin
Embed
erDiagram
CAR {
string registrationNumber
string make
string model
}
PERSON {
string firstName
string lastName
int age
}
PERSON:::foo ||--|| CAR : owns
PERSON o{--|| HOUSE:::bar : has
classDef foo stroke:#f00
classDef bar stroke:#0f0
classDef foobar stroke:#00f
Katulad ng class statement, ang shorthand syntax ay maaari ring maglapat ng maraming class nang sabay:
Kopyahin
Embed
nodeId:::className1,className2
Default na class
Kung pinangalanan ang isang class na default, ito ay itatalaga sa lahat ng class na walang partikular na class definition.
Kopyahin
Embed
classDef default fill:pink,stroke:#333,stroke-width:4px;
Tandaan: ang custom na estilo mula sa estilo o ibang class statement ay may priority, at nag-o-override sa default na estilo. (Halimbawa, ang default class ay nagtatakda ng pink na background para sa node, ngunit kung ilalapat ang blue class, magbibigay ito ng blue na background color sa node.)
Kopyahin
Embed
erDiagram
CAR {
string registrationNumber
string make
string model
}
PERSON {
string firstName
string lastName
int age
}
PERSON:::foo ||--|| CAR : owns
PERSON o{--|| HOUSE:::bar : has
classDef default fill:pink,stroke-width:4px
classDef foo stroke:#f90
classDef bar stroke:#ff0
classDef foobar stroke:#69f
Configuration
Layout
Ang layout ng chart ay pinoproseso ng render(), ang default na layout ay ELK layout, angkop para sa mas malaki at mas kumplikadong chart.
Upang gumamit ng classic na Dagre layout sa halip, maaari mong itakda ito sa config ng YAML frontmatter
Kopyahin
Embed
---
config:
layout: dagre
---
Ang nilalaman ng Mermaid code ay ang sumusunod:
Kopyahin
Embed
---
title: Order example
config:
layout: elk
---
erDiagram
CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ LINE-ITEM : contains
CUSTOMER }|..|{ DELIVERY-ADDRESS : uses