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.
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.
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.
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) |
| 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 |
| Vrednost | 别名为 |
|---|---|
| to | Identifikacijsko |
| optionally to | Neidentifikacijsko |
Kopiraj
Vdelava
erDiagram
CAR ||--o{ NAMED-DRIVER : allows
PERSON }o..o{ NAMED-DRIVER : is
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:
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.
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.
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.
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.
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.
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:
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:
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.)
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
Kopiraj
Vdelava
---
config:
layout: dagre
---
Vsebina kode Mermaid je naslednja:
Kopiraj
Vdelava
---
title: Order example
config:
layout: elk
---
erDiagram
CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ LINE-ITEM : contains
CUSTOMER }|..|{ DELIVERY-ADDRESS : uses