Proseso Uri
Graphical na pagpapahayag
Nag-iisip Uri
Nakabalangkas na pagpapahayag
Mga Tala Uri
Mahusay na pagpapahayag

Dayagram ng ERSintaks

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.

Code
                            
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.

Code
                            
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.

Code
                            
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)
Alias
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
Alias
Value 别名为
to Identifying
optionally to Non-identifying
Code
                            
Kopyahin
Embed
erDiagram CAR ||--o{ NAMED-DRIVER : allows PERSON }o..o{ NAMED-DRIVER : is
Code
                            
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:

Code
                            
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.

Code
                            
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.

Code
                            
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.

Code
                            
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.

Code
                            
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.

Code
                            
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:

Code
                            
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:

Code
                            
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.)

Code
                            
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

Code
                            
Kopyahin
Embed
--- config: layout: dagre ---

Ang nilalaman ng Mermaid code ay ang sumusunod:

Code
                            
Kopyahin
Embed
--- title: Order example config: layout: elk --- erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses