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

ER-kaavioSyntaksi

ER-kaavio

Entiteetti-relaatiokaavio (lyhennettynä ER-kaavio) kuvaa tietyn tietoalueen toisiinsa liittyviä kiinnostavia asioita. Perustason ER-kaavio koostuu entiteettityypeistä (kiinnostavien asioiden luokitteluun), ja siinä määritellään suhteet, joita entiteettien (näiden entiteettityyppien esiintymien) välillä voi olla,Huomaa, että ER-kaavioiden käytännössä 'entiteettityyppiä' lyhennetään lähes aina 'entiteetiksi'. Esimerkiksi 'CUSTOMER-entiteettityyppi' kutsutaan yleensä suoraan 'CUSTOMER-entiteetiksi'. Tämä käytäntö on hyvin yleinen, joten muita tapoja ei suositella, mutta teknisesti entiteetti on entiteettityypin abstrakti esiintymä, ja ER-kaavio näyttää juuri nämä abstraktit esiintymät ja niiden väliset suhteet. Siksi entiteetit nimetään aina yksikössä.

Koodi
                            
Kopioi
Upotus
--- title: Order example --- erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses

Entiteettien nimet kirjoitetaan yleensä isoilla kirjaimilla, vaikka tälle ei ole yleisesti hyväksyttyä standardia eikä Mermaid-syntaksi sitä vaadi.

Entiteettien väliset suhteet esitetään viivoilla, joissa on kardinaliteettia ilmaisevat päätepistemerkinnät. Mermaid käyttää suosituinta varpaankynsisymbolia; varpaankynsi esittää intuitiivisesti, että siihen liittyvällä entiteetillä voi olla useita esiintymiä.

ER-kaaviota voidaan käyttää moniin tarkoituksiin, abstraktista loogisesta mallista, joka ei sisällä lainkaan toteutustietoja, relaatiotietokantataulujen fyysiseen malliin. Ominaisuuksien sisällyttäminen ER-kaavioon auttaa ymmärtämään entiteetin käyttötarkoitusta ja merkitystä; näiden ominaisuuksien ei tarvitse olla tyhjentäviä, ja usein pieni osa ominaisuuksista riittää. Mermaid sallii niiden määrittämisen tyypin ja nimen perusteella.

Koodi
                            
Kopioi
Upotus
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 }

Kun sisällytät ominaisuuksia ER-kaavioon, sinun on päätettävä, sisällytätkö vieraan avaimen ominaisuutena; tämä voi riippua siitä, missä määrin haluat esittää relaatiotaulukon rakenteen. Jos kaaviosi on looginen malli, jonka ei ole tarkoitus vihjata relaatiototeutuksesta, nämä ominaisuudet kannattaa jättää pois, koska assosiaatiosuhde välittää jo sen, miten entiteetit liittyvät toisiinsa. Esimerkiksi JSON-tietorakenne voi toteuttaa yksi-moneen-suhteen taulukolla ilman vieraan avaimen ominaisuutta. Vastaavasti oliopohjainen ohjelmointikieli voi käyttää osoittimia tai viittauksia kokoelmaan. Jopa niiden mallien kohdalla, jotka on tarkoitettu relaatiototeutukseen, voidaan katsoa, että vieraan avaimen ominaisuuden sisällyttäminen toistaisi suhteen välittämän tiedon eikä lisäisi entiteetille merkitystä.

Syntaksi

Entiteetit ja suhteet

ER-kaavion Mermaid-syntaksi on yhteensopiva PlantUML:n kanssa, ja se laajentaa suhteiden merkitsemiseen käytettyjä toimintoja. Jokainen lause sisältää seuraavat:

                            
Kopioi
Upotus
<first-entity> [<relationship> <second-entity> : <relationship-label>]
  • first-entity on ensimmäisen entiteetin nimi. Nimi tukee mitä tahansa Unicode-merkkiä, ja se voi sisältää välilyöntejä, jos se suljetaan lainausmerkkeihin.
  • relationship kuvaa kahden entiteetin välistä keskinäistä suhdetta.
  • second-entity on toisen entiteetin nimi.
  • relationship-label kuvaa suhdetta ensimmäisen entiteetin näkökulmasta.

Esimerkiksi:

                            
Kopioi
Upotus
PROPERTY ||--|{ ROOM : contains

Tämä määrittely voidaan tulkita seuraavasti: yksi ominaisuus sisältää yhden tai useamman huoneen, ja yksi huone kuuluu vain yhteen ominaisuuteen. Tässä merkintä on ensimmäisen entiteetin näkökulmasta: yksi ominaisuus sisältää huoneen, mutta huone ei sisällä ominaisuutta. Toisen entiteetin näkökulmasta vastaava merkintä on yleensä helppo päätellä.

Vain first-entity-osa on pakollinen. Tämä mahdollistaa entiteettien näyttämisen ilman suhteita, mikä on erittäin hyödyllistä kaaviota iteratiivisesti rakennettaessa. Jos lauseen muut osat on määritetty, kaikki osat ovat pakollisia.

Unicode-teksti

Entiteettien nimet, suhteet ja ominaisuudet tukevat kaikki unicode-tekstiä.

Koodi
                            
Kopioi
Upotus
erDiagram "This ❤ Unicode"

Suhteen syntaksi

Kunkin lauseen suhdeosa voidaan jakaa kolmeen alaosaan:

  • Ensimmäisen entiteetin kardinaliteetti suhteessa toiseen entiteettiin
  • Antaako suhde lapsientiteetille identiteetin
  • Toisen entiteetin kardinaliteetti suhteessa ensimmäiseen entiteettiin

Kardinaliteetti on ominaisuus, joka kuvaa, kuinka monta elementtiä toinen entiteetti voi liittää kyseiseen entiteettiin. Yllä olevassa esimerkissä yksi PROPERTY voi liittää yhden tai useamman ROOM-esiintymän, kun taas yksi ROOM voi liittää vain yhden PROPERTY:n. Jokaisessa kardinaliteettimerkinnässä on kaksi merkkiä: uloin merkki edustaa maksimia ja sisin merkki minimiä. Seuraava taulukko kokoaa kardinaliteetin mahdollisuudet:

Arvo (vasen) Arvo (oikea) Merkitys
|o o| Nolla tai yksi
|| || Täsmälleen yksi
}o o{ Nolla tai useampi (ei ylärajaa)
}| |{ Yksi tai useampi (ei ylärajaa)
Alias
Arvo (vasen) Arvo (oikea) Merkitys
one or zero one or zero Nolla tai yksi
zero or one zero or one Nolla tai yksi
one or more one or more Yksi tai useampi
one or many one or many Yksi tai useampi
many(1) many(1) Yksi tai useampi
1+ 1+ Yksi tai useampi
zero or more zero or more Nolla tai useampi
zero or many zero or many Nolla tai useampi
many(0) many(0) Nolla tai useampi
0+ 0+ Nolla tai useampi
only one only one Täsmälleen yksi
1 1 Täsmälleen yksi

Identiteetin tunnistaminen

Suhteet voidaan jakaa tunnistaviin ja ei-tunnistaviin, ja ne renderöidään yhtenäisellä viivalla tai katkoviivalla. Tämä on tärkeää, kun yksi entiteetti ei voi olla olemassa itsenäisesti ilman toista. Esimerkiksi yritys, joka tarjoaa vakuutuksia ihmisten autojen ajamiseen, saattaa tarvita NAMED-DRIVER-tietojen tallentamista. Mallintamisen yhteydessä voimme ensin havaita, että yhtä CAR-autoa voidaan ajaa usealla PERSON-henkilöllä ja yksi PERSON voi ajaa montaa CAR-autoa; molemmat voivat olla olemassa ilman toisiaan, joten tämä on ei-identifioiva suhde, jonka voimme määrittää Mermaidissa muodossa: PERSON }|..|{ CAR : "driver". Huomioi suhteen keskellä olevat kaksi pistettä, mikä johtaa katkoviivan piirtämiseen entiteettien väliin. Kun tämä monesta-moneen-suhde kuitenkin puretaan kahdeksi yhdestä-moneen-suhteeksi, havaitsemme, että NAMED-DRIVER ei voi olla olemassa ilman PERSON-henkilöä ja CAR-autoa. Näistä suhteista tulee identifioivia suhteita, jotka merkitään yhdysviivalla, mikä vastaa yhtenäistä viivaa:

Arvo Alias
-- Tunnistava
.. Ei-tunnistava
Alias
Arvo 别名为
to Tunnistava
optionally to Ei-tunnistava
Koodi
                            
Kopioi
Upotus
erDiagram CAR ||--o{ NAMED-DRIVER : allows PERSON }o..o{ NAMED-DRIVER : is
Koodi
                            
Kopioi
Upotus
erDiagram CAR ||--o{ NAMED-DRIVER : allows PERSON }o--o{ NAMED-DRIVER : is

Ominaisuus

Entiteetille voidaan määrittää ominaisuuksia määrittämällä entiteetin nimi ja sen jälkeen lohko, joka sisältää useita type name -määrittelyjä ja jonka ympärillä on aaltosulut {}. Ominaisuudet näytetään entiteettilaatikon sisällä, esimerkiksi:

Koodi
                            
Kopioi
Upotus
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 }

type-arvon on alettava aakkosmerkillä, ja se voi sisältää numeroita, yhdysviivoja, alaviivoja, sulkeita ja hakasulkeita. name-arvo noudattaa samankaltaista muotoa kuin type, mutta se voi myös alkaa tähdellä, mikä on toinen vaihtoehto osoittaa, että ominaisuus on pääavain. Tämän lisäksi ei ole muita rajoituksia eikä implisiittistä kelvollisten tietotyyppien joukkoa.

Entiteetin alias

Entiteetille voidaan lisätä alias hakasulkeilla. Jos alias on annettu, kaaviossa näytetään entiteetin nimen sijaan alias, ja alias noudattaa kaikkia samoja sääntöjä kuin entiteetin nimi.

Koodi
                            
Kopioi
Upotus
erDiagram p[Person] { string firstName string lastName } a["Customer Account"] { string email } p ||--o| a : has

Ominaisuuden avaimet ja kommentit

Ominaisuuksille voidaan määrittää myös avaimia tai kommentteja. Avain voi olla pääavain (PK), vierasavain (FK) tai yksilöllinen avain (UK). Useiden avainrajoitusten määrittämiseksi yksittäiselle ominaisuudelle erota ne pilkulla (esimerkiksi PK, FK). Kommentti määritellään ominaisuuden lopussa olevilla lainausmerkeillä, eikä kommentti voi sisältää lainausmerkkejä.

Koodi
                            
Kopioi
Upotus
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

Suunta

Suuntalause määrittelee kaavion suunnan.

TB määrittelee kaavion suunnaksi ylhäältä alas; BT voi kääntää sen alhaalta ylös.

Koodi
                            
Kopioi
Upotus
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 määrittelee kaavion suunnaksi vasemmalta oikealle; RL voi kääntää sen oikealta vasemmalle.

Koodi
                            
Kopioi
Upotus
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 }

Aseta solmun tyyli

Solmuun voidaan soveltaa tiettyä tyyliä, kuten paksumpaa reunusta tai erilaista taustaväriä.

Koodi
                            
Kopioi
Upotus
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

Voit myös liittää tyylin solmuluetteloon yhdessä lauseessa:

                            
Kopioi
Upotus
style nodeId1,nodeId2 styleList

Luokka

Kätevämpää kuin tyylin määrittäminen joka kerta on määrittää tyyliluokka ja liittää se solmuihin, jotka tarvitsevat erilaisen ulkoasun.

Luokan määrittely on seuraavan esimerkin mukainen:

                            
Kopioi
Upotus
classDef className fill:pink,stroke:#333,stroke-width:4px

Useita luokkia voidaan myös määrittää yhdessä lauseessa:

                            
Kopioi
Upotus
classDef firstClassName,secondClassName font-size:12pt

Luokan liittämisen solmuun syntaksi on seuraava:

                            
Kopioi
Upotus
class nodeId1 className

Voit myös liittää luokan solmuluetteloon yhdessä lauseessa:

                            
Kopioi
Upotus
class nodeId1,nodeId2 className

Voit myös liittää useita luokkia samanaikaisesti:

                            
Kopioi
Upotus
class nodeId1,nodeId2 className1,className2

Helppo tapa lisätä luokka on liittää luokan nimi solmuun :::-operaattorilla seuraavasti:

Koodi
                            
Kopioi
Upotus
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

Entiteettien välisten suhteiden määrittelyyn voidaan käyttää seuraavaa syntaksia:

Koodi
                            
Kopioi
Upotus
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

Samoin kuin class-lause, pikasyntaksi voi myös soveltaa useita luokkia kerralla:

                            
Kopioi
Upotus
nodeId:::className1,className2

Oletusluokka

Jos luokan nimi on default, se annetaan kaikille luokille, joilla ei ole tiettyä luokkamäärittelyä.

                            
Kopioi
Upotus
classDef default fill:pink,stroke:#333,stroke-width:4px;

Huomautus: mukautetut tyylit style- tai muista class-lauseista ovat ensisijaisia ja korvaavat oletustyylin. (Esimerkiksi default-luokka asettaa solmulle vaaleanpunaisen taustan, mutta jos blue-luokkaa sovelletaan, solmu saa sinisen taustavärin.)

Koodi
                            
Kopioi
Upotus
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

Kokoonpano

Asettelu

Kaavion asettelun hoitaa render(), ja oletusasettelu on ELK-asettelu, joka sopii suurempiin ja monimutkaisempiin kaavioihin.

Voit siirtyä klassiseen Dagre-asetteluun asettamalla sen YAML-frontmatterin config-osiossa

Koodi
                            
Kopioi
Upotus
--- config: layout: dagre ---

Mermaid-koodin sisältö on seuraava:

Koodi
                            
Kopioi
Upotus
--- title: Order example config: layout: elk --- erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses