Register
Process Type
Graphical expression
Mind Type
Structured expression
Note Type
Efficient expression

ER-diagramSintaksa

ER-diagram

Diagram entitet in razmerij (na kratko ER diagram) opisuje medsebojno povezane stvari, ki so zanimive na določenem področju znanja. Osnovni ER diagram sestavljajo vrste entitet (za razvrščanje zanimivih stvari) in določa razmerja, ki lahko obstajajo med entitetami (primerki teh vrst entitet).,Upoštevajte, da se v praksi ER diagramov "vrsta entitete" skoraj vedno na kratko imenuje "entiteta". Na primer, "vrsta entitete CUSTOMER" se običajno imenuje kar "entiteta CUSTOMER". Ta praksa je zelo pogosta, zato drugi načini niso priporočljivi, vendar je strokovno gledano entiteta abstraktni primerek vrste entitete in ER diagram prikazuje prav te abstraktne primerke in razmerja med njimi. Zato so entitete vedno poimenovane z samostalnikom v ednini.

Koda
                            
Kopiraj
Vdelava
--- title: Order example --- erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses

Imena entitet so običajno zapisana z velikimi črkami, čeprav za to ni splošno priznanega standarda in sintaksa Mermaid tega ne zahteva.

Razmerja med entitetami so predstavljena s črtami s končnimi oznakami, ki označujejo kardinalnost. Mermaid uporablja najbolj priljubljeni simbol vranje noge, ki nazorno prikazuje, da ima lahko entiteta, na katero je povezan, več primerkov.

ER diagrami se uporabljajo za različne namene, od abstraktnih logičnih modelov brez podrobnosti izvedbe do fizičnih modelov tabel relacijskih baz podatkov. Vključitev definicij atributov v ER diagram pomaga razumeti namen in pomen entitet; te definicije atributov ni treba izčrpno navesti, običajno zadošča majhen del atributov. Mermaid omogoča, da jih definirate z njihovo vrsto in imenom.

Koda
                            
Kopiraj
Vdelava
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 }

Pri vključitvi atributov v ER diagram se morate odločiti, ali boste tuje ključe vključili kot atribute, kar je lahko odvisno od tega, v kolikšni meri želite predstaviti strukturo relacijskih tabel. Če je vaš diagram logični model in naj ne bi nakazoval relacijske izvedbe, je bolje, da teh atributov ne vključite, saj povezovalna razmerja že izražajo način povezovanja med entitetami. Na primer, podatkovno strukturo JSON je mogoče izvesti z matriko brez atributov tujih ključev. Podobno lahko objektno usmerjeni programski jeziki uporabijo kazalce ali sklice na zbirke. Tudi pri modelih, namenjenih relacijski izvedbi, se lahko šteje, da bi vključitev atributov tujih ključev podvajala informacije, ki jih prikazujejo razmerja, in entiteti ne bi dodala pomena.

Sintaksa

Entitete in razmerja

Sintaksa Mermaid za ER diagram je združljiva s PlantUML in razširja funkcije za označevanje razmerij. Vsaka izjava vključuje naslednje:

                            
Kopiraj
Vdelava
<first-entity> [<relationship> <second-entity> : <relationship-label>]
  • first-entity je ime prve entitete. Ime podpira poljubne znake Unicode in lahko vsebuje presledke, če je ovito v dvojne narekovaje.
  • relationship opisuje medsebojno razmerje med dvema entitetama.
  • second-entity je ime druge entitete.
  • relationship-label opisuje razmerje z vidika prve entitete.

Na primer:

                            
Kopiraj
Vdelava
PROPERTY ||--|{ ROOM : contains

To izjavo lahko razumemo kot: ena lastnost vsebuje enega ali več prostorov, medtem ko prostor pripada samo eni lastnosti. Oznaka tukaj je z vidika prve entitete: lastnost vsebuje prostor, vendar prostor ne vsebuje lastnosti. Z vidika druge entitete je enakovredno oznako običajno enostavno sklepati.

Obvezen je le del first-entity. To omogoča prikaz entitet brez razmerij, kar je zelo uporabno pri iterativnem sestavljanju diagrama. Če določite druge dele izjave, so vsi deli obvezni.

Besedilo Unicode

Imena entitet, razmerja in atributi podpirajo besedilo unicode.

Koda
                            
Kopiraj
Vdelava
erDiagram "This ❤ Unicode"

Sintaksa razmerij

Del razmerja v vsaki izjavi lahko razdelimo na tri poddele:

  • Kardinalnost prve entitete glede na drugo entiteto
  • Ali razmerje daje podrejeni entiteti identifikacijo
  • Kardinalnost druge entitete glede na prvo entiteto

Kardinalnost je lastnost, ki opisuje število elementov, s katerimi je druga entiteta lahko povezana z zadevno entiteto. V zgornjem primeru je PROPERTY lahko povezan z enim ali več primerki ROOM, medtem ko je ROOM lahko povezan le z enim PROPERTY. Vsaka oznaka kardinalnosti vsebuje dva znaka; skrajni znak predstavlja največjo vrednost, najbolj notranji znak pa najmanjšo. Spodnja tabela povzema možnosti kardinalnosti:

Vrednost (levo) Vrednost (desno) Pomen
|o o| Nič ali ena
|| || Natanko ena
}o o{ Nič ali več (brez zgornje meje)
}| |{ Ena ali več (brez zgornje meje)
Vzdevek
Vrednost (levo) Vrednost (desno) Pomen
one or zero one or zero Nič ali ena
zero or one zero or one Nič ali ena
one or more one or more Ena ali več
one or many one or many Ena ali več
many(1) many(1) Ena ali več
1+ 1+ Ena ali več
zero or more zero or more Nič ali več
zero or many zero or many Nič ali več
many(0) many(0) Nič ali več
0+ 0+ Nič ali več
only one only one Natanko ena
1 1 Natanko ena

Identifikacija

Razmerja so lahko identifikacijska ali neidentifikacijska in se upodobijo s polno ali črtkano črto. To je pomembno, kadar ena entiteta ne more obstajati neodvisno brez druge. Na primer, podjetje, ki ljudem nudi zavarovanje za vožnjo avtomobila, bo morda moralo shranjevati podatke o NAMED-DRIVER. Pri modeliranju bomo morda najprej opazili, da lahko CAR vozi veliko PERSON in da lahko PERSON vozi veliko CAR, pri čemer lahko oba obstajata brez drugega, zato gre za neidentifikacijsko razmerje, ki ga v Mermaid lahko določimo kot: PERSON }|..|{ CAR : "driver". Upoštevajte dve piki na sredini razmerja, zaradi česar bo med entitetama narisana črtkana črta. Ko pa se to razmerje več proti več razčleni na dve razmerji ena proti več, opazimo, da NAMED-DRIVER ne more obstajati brez PERSON in CAR. Ta razmerja postanejo identifikacijska in so predstavljena s pomišljajem, kar ustreza polni črti:

Vrednost Vzdevek
-- Identifikacijsko
.. Neidentifikacijsko
Vzdevek
Vrednost 别名为
to Identifikacijsko
optionally to Neidentifikacijsko
Koda
                            
Kopiraj
Vdelava
erDiagram CAR ||--o{ NAMED-DRIVER : allows PERSON }o..o{ NAMED-DRIVER : is
Koda
                            
Kopiraj
Vdelava
erDiagram CAR ||--o{ NAMED-DRIVER : allows PERSON }o--o{ NAMED-DRIVER : is

Atribut

Atribute entitete lahko definirate tako, da navedete ime entitete, ki mu sledi blok z več pari type name, pri čemer je blok obdan z zavitima oklepajema {}. Atributi se prikažejo znotraj polja entitete, na primer:

Koda
                            
Kopiraj
Vdelava
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 }

Vrednost type se mora začeti z abecednim znakom in lahko vsebuje številke, pomišljaje, podčrtaje, oklepaje in oglate oklepaje. Vrednost name sledi podobni obliki kot type, lahko pa se začne tudi z zvezdico, kot še eno možnost za označitev, da je atribut primarni ključ. Poleg tega ni drugih omejitev in ni implicitnega nabora veljavnih podatkovnih vrst.

Vzdevek entitete

Entiteti lahko dodate vzdevek z oglatimi oklepaji. Če je vzdevek podan, bo v diagramu prikazan vzdevek namesto imena entitete; vzdevek sledi vsem enakim pravilom kot ime entitete.

Koda
                            
Kopiraj
Vdelava
erDiagram p[Person] { string firstName string lastName } a["Customer Account"] { string email } p ||--o| a : has

Ključi atributov in komentarji

Atributi lahko definirajo tudi ključe ali komentarje. Ključ je lahko primarni ključ (PK), tuji ključ (FK) ali edinstveni ključ (UK). Če želite na posameznem atributu določiti več omejitev ključa, jih ločite z vejicami (na primer PK, FK). Komentarji so definirani z dvojnimi narekovaji na koncu atributa, pri čemer komentar ne sme vsebovati znaka dvojnih narekovajev.

Koda
                            
Kopiraj
Vdelava
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

Smer

Stavek za smer določa smer diagrama.

TB določa, da je smer diagrama od zgoraj navzdol, BT pa jo lahko obrne v od spodaj navzgor.

Koda
                            
Kopiraj
Vdelava
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 }

LR določa, da je smer diagrama od leve proti desni, RL pa jo lahko obrne v od desne proti levi.

Koda
                            
Kopiraj
Vdelava
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 }

Nastavitev sloga vozlišča

Vozlišču lahko uporabite določen slog, na primer debelejši rob ali drugačno barvo ozadja.

Koda
                            
Kopiraj
Vdelava
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

Slog lahko v enem stavku priložite tudi seznamu vozlišč:

                            
Kopiraj
Vdelava
style nodeId1,nodeId2 styleList

Razred

Namesto da bi slog definirali vsakič znova, je bolj priročno definirati slogovni razred in ga priložiti vozliščem, ki naj bi bila videti drugače.

Definicija razreda je prikazana v spodnjem primeru:

                            
Kopiraj
Vdelava
classDef className fill:pink,stroke:#333,stroke-width:4px

Poleg tega lahko v enem stavku definirate več razredov:

                            
Kopiraj
Vdelava
classDef firstClassName,secondClassName font-size:12pt

Sintaksa za prilaganje razreda vozlišču je naslednja:

                            
Kopiraj
Vdelava
class nodeId1 className

V enem stavku lahko razred priložite tudi seznamu vozlišč:

                            
Kopiraj
Vdelava
class nodeId1,nodeId2 className

Priložite lahko tudi več razredov hkrati:

                            
Kopiraj
Vdelava
class nodeId1,nodeId2 className1,className2

Preprost način za dodajanje razreda je uporaba operatorja :::, s katerim ime razreda priložite vozlišču, kot je prikazano spodaj:

Koda
                            
Kopiraj
Vdelava
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

Za deklariranje razmerij med entitetami lahko uporabite naslednjo sintakso:

Koda
                            
Kopiraj
Vdelava
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

Podobno kot stavek class lahko tudi okrajšana sintaksa uporabi več razredov hkrati:

                            
Kopiraj
Vdelava
nodeId:::className1,className2

Privzeti razred

Če je razred poimenovan default, se dodeli vsem razredom brez posebne definicije razreda.

                            
Kopiraj
Vdelava
classDef default fill:pink,stroke:#333,stroke-width:4px;

Opomba: slogi po meri iz stavkov style ali drugih stavkov class imajo prednost in preglasijo privzeti slog. (Na primer, razred default vozlišču nastavi rožnato ozadje, toda če uporabite razred blue, bo vozlišče dobilo modro barvo ozadja.)

Koda
                            
Kopiraj
Vdelava
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

Konfiguracija

Postavitev

Postavitev diagrama obravnava render(), privzeta postavitev pa je postavitev ELK, ki je primerna za večje in bolj zapletene diagrame.

Če želite namesto tega uporabiti klasično postavitev Dagre, jo lahko nastavite v config v YAML frontmatter

Koda
                            
Kopiraj
Vdelava
--- config: layout: dagre ---

Vsebina kode Mermaid je naslednja:

Koda
                            
Kopiraj
Vdelava
--- title: Order example config: layout: elk --- erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses