Proses Taip
Ekspresi grafik
Berfikir Taip
Ekspresi berstruktur
Nota Taip
Ekspresi yang cekap

Rajah ERSintaks

Rajah ER

Gambar rajah hubungan entiti (ringkasnya ER) menerangkan perkara yang menjadi perhatian dan saling berkaitan dalam bidang pengetahuan tertentu. ER asas terdiri daripada jenis entiti (digunakan untuk mengelaskan perkara yang menjadi perhatian), dan menentukan hubungan yang boleh wujud antara entiti (contoh bagi jenis entiti tersebut),Sila ambil perhatian bahawa dalam amalan sebenar ER, 'jenis entiti' hampir selalu dipanggil ringkas sebagai 'entiti'. Contohnya, 'jenis entiti CUSTOMER' biasanya hanya dipanggil 'entiti CUSTOMER'. Amalan ini sangat biasa, jadi cara lain tidak digalakkan, tetapi secara teknikalnya, entiti ialah contoh abstrak bagi jenis entiti, dan ER menunjukkan contoh abstrak ini serta hubungan antara mereka. Inilah sebabnya entiti sentiasa dinamakan menggunakan kata nama tunggal.

Kod
                            
Salin
Benamkan
--- title: Order example --- erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses

Nama entiti biasanya menggunakan huruf besar, walaupun tiada standard yang diiktiraf untuk ini, dan sintaks Mermaid juga tidak mewajibkannya.

Hubungan antara entiti diwakili oleh garisan dengan penanda hujung yang menunjukkan kardinaliti. Mermaid menggunakan simbol kaki gagak yang paling popular; kaki gagak secara intuitif menunjukkan bahawa entiti yang disambungnya mungkin mempunyai berbilang contoh.

ER boleh digunakan untuk pelbagai tujuan, daripada model logik abstrak yang tidak mengandungi sebarang butiran pelaksanaan, hingga model fizikal jadual pangkalan data hubungan. Memasukkan definisi sifat pada ER membantu memahami kegunaan dan maksud entiti; definisi sifat ini tidak perlu lengkap, biasanya sebahagian kecil sifat sudah memadai. Mermaid membenarkan ia ditakrifkan dengan jenis dan namanya.

Kod
                            
Salin
Benamkan
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 }

Apabila memasukkan sifat pada ER, anda mesti memutuskan sama ada untuk memasukkan kunci asing sebagai sifat, ini mungkin bergantung pada sejauh mana anda ingin mewakili struktur jadual hubungan. Jika carta anda ialah model logik dan tidak bertujuan untuk membayangkan pelaksanaan hubungan, maka lebih baik tidak memasukkan sifat tersebut, kerana hubungan perkaitan sudah menyampaikan cara entiti berkaitan. Contohnya, struktur data JSON boleh melaksanakan hubungan satu-ke-banyak menggunakan tatasusunan tanpa sifat kunci asing. Begitu juga, bahasa pengaturcaraan berorientasikan objek boleh menggunakan penunjuk atau rujukan kepada koleksi. Walaupun bagi model yang bertujuan untuk pelaksanaan hubungan, memasukkan sifat kunci asing mungkin dianggap menduplikasi maklumat yang disampaikan oleh hubungan, dan tidak menambah makna kepada entiti.

Sintaks

Entiti dan hubungan

Sintaks Mermaid bagi ER serasi dengan PlantUML, dan diperluas dengan fungsi untuk menandakan hubungan. Setiap pernyataan merangkumi perkara berikut:

                            
Salin
Benamkan
<first-entity> [<relationship> <second-entity> : <relationship-label>]
  • first-entity ialah nama entiti pertama. Nama menyokong sebarang aksara Unicode; jika diapit dengan tanda petik berganda, ia boleh mengandungi ruang.
  • relationship menerangkan hubungan timbal balik antara dua entiti.
  • second-entity ialah nama entiti yang satu lagi.
  • relationship-label menerangkan hubungan dari sudut entiti pertama.

Contohnya:

                            
Salin
Benamkan
PROPERTY ||--|{ ROOM : contains

Pengisytiharan ini boleh difahami sebagai: satu PROPERTY mengandungi satu atau lebih ROOM, manakala satu ROOM hanya dimiliki oleh satu PROPERTY. Label di sini dilihat dari sudut entiti pertama: satu PROPERTY mengandungi satu ROOM, tetapi satu ROOM tidak mengandungi PROPERTY. Dari sudut entiti kedua, label yang setara biasanya mudah disimpulkan.

Hanya bahagian first-entity yang wajib. Ini membolehkan entiti tanpa hubungan dipaparkan, yang sangat berguna semasa membina carta secara berulang. Jika bahagian lain pernyataan ditentukan, maka semua bahagian adalah wajib.

Teks Unicode

Nama entiti, hubungan dan sifat semuanya menyokong teks unicode.

Kod
                            
Salin
Benamkan
erDiagram "This ❤ Unicode"

Sintaks hubungan

Bahagian hubungan setiap pernyataan boleh dipecahkan kepada tiga subbahagian:

  • Kardinaliti entiti pertama berbanding entiti kedua
  • Sama ada hubungan itu memberikan pengenalan identiti kepada entiti anak
  • Kardinaliti entiti kedua berbanding entiti pertama

Kardinaliti ialah sifat yang menerangkan bilangan elemen entiti lain yang boleh dikaitkan dengan entiti berkenaan. Dalam contoh di atas, satu PROPERTY boleh mengaitkan satu atau lebih contoh ROOM, manakala satu ROOM hanya boleh mengaitkan satu PROPERTY. Setiap penanda kardinaliti mempunyai dua aksara; aksara paling luar mewakili nilai maksimum, aksara paling dalam mewakili nilai minimum. Jadual di bawah merumuskan kemungkinan kardinaliti:

Nilai (kiri) Nilai (kanan) Makna
|o o| Sifar atau satu
|| || Tepat satu
}o o{ Sifar atau lebih (tanpa had)
}| |{ Satu atau lebih (tanpa had)
Alias
Nilai (kiri) Nilai (kanan) Makna
one or zero one or zero Sifar atau satu
zero or one zero or one Sifar atau satu
one or more one or more Satu atau lebih
one or many one or many Satu atau lebih
many(1) many(1) Satu atau lebih
1+ 1+ Satu atau lebih
zero or more zero or more Sifar atau lebih
zero or many zero or many Sifar atau lebih
many(0) many(0) Sifar atau lebih
0+ 0+ Sifar atau lebih
only one only one Tepat satu
1 1 Tepat satu

Pengenalan identiti

Hubungan boleh dibahagikan kepada pengenalan dan bukan pengenalan, dipaparkan masing-masing dengan garisan pejal atau putus-putus. Ini penting apabila salah satu entiti tidak boleh wujud secara bebas tanpa entiti yang lain. Contohnya, sebuah syarikat yang menyediakan insurans memandu kereta untuk orang ramai mungkin perlu menyimpan data NAMED-DRIVER. Semasa memodelkan, kita mungkin mula-mula memerhatikan bahawa satu CAR boleh dipandu oleh banyak PERSON, dan satu PERSON boleh memandu banyak CAR, kedua-duanya boleh wujud tanpa satu sama lain, jadi ini ialah hubungan bukan pengenalan, yang boleh kita tentukan dalam Mermaid sebagai: PERSON }|..|{ CAR : "driver". Sila ambil perhatian dua titik di tengah hubungan, ini akan menyebabkan garisan putus-putus dilukis antara dua entiti. Walau bagaimanapun, apabila hubungan banyak-ke-banyak ini diselesaikan menjadi dua hubungan satu-ke-banyak, kita memerhatikan bahawa NAMED-DRIVER tidak mungkin wujud tanpa PERSON dan CAR. Hubungan ini menjadi hubungan pengenalan, dan akan diwakili dengan sengkang, sepadan dengan garisan pejal:

Nilai Alias
-- Pengenalan
.. Bukan pengenalan
Alias
Nilai 别名为
to Pengenalan
optionally to Bukan pengenalan
Kod
                            
Salin
Benamkan
erDiagram CAR ||--o{ NAMED-DRIVER : allows PERSON }o..o{ NAMED-DRIVER : is
Kod
                            
Salin
Benamkan
erDiagram CAR ||--o{ NAMED-DRIVER : allows PERSON }o--o{ NAMED-DRIVER : is

Sifat

Sifat boleh ditakrifkan untuk entiti dengan menentukan nama entiti, diikuti dengan blok yang mengandungi berbilang type name, di mana blok dikelilingi oleh pendakap besar {}. Sifat akan dipaparkan dalam kotak entiti, contohnya:

Kod
                            
Salin
Benamkan
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 }

Nilai type mesti bermula dengan aksara abjad, dan boleh mengandungi nombor, sengkang, garis bawah, kurungan kecil dan pendakap sederhana. Nilai name mengikuti format yang serupa dengan type, tetapi juga boleh bermula dengan tanda bintang, sebagai satu lagi pilihan untuk menunjukkan bahawa sifat itu ialah kunci utama. Selain itu, tiada sekatan lain, dan tiada set jenis data sah yang tersirat.

Alias entiti

Pendakap sederhana boleh digunakan untuk menambah alias pada entiti. Jika alias diberikan, carta akan memaparkan alias dan bukan nama entiti; alias mematuhi semua peraturan yang sama seperti nama entiti.

Kod
                            
Salin
Benamkan
erDiagram p[Person] { string firstName string lastName } a["Customer Account"] { string email } p ||--o| a : has

Kunci sifat dan komen

Sifat juga boleh mentakrifkan kunci atau komen. Kunci boleh jadi kunci utama (PK), kunci asing (FK) atau kunci unik (UK). Untuk menentukan berbilang kekangan kunci pada satu sifat, pisahkannya dengan koma (contohnya, PK, FK). Komen ditakrifkan melalui tanda petik berganda di penghujung sifat; komen tidak boleh mengandungi aksara tanda petik berganda.

Kod
                            
Salin
Benamkan
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

Arah

Pernyataan arah mengisytiharkan arah carta.

TB mengisytiharkan arah carta dari atas ke bawah; BT boleh membalikkannya menjadi dari bawah ke atas.

Kod
                            
Salin
Benamkan
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 mengisytiharkan arah carta dari kiri ke kanan; RL boleh membalikkannya menjadi dari kanan ke kiri.

Kod
                            
Salin
Benamkan
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 }

Tetapkan gaya nod

Gaya tertentu boleh digunakan pada nod, contohnya sempadan yang ditebalkan atau warna latar belakang yang berbeza.

Kod
                            
Salin
Benamkan
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

Gaya juga boleh dilampirkan pada senarai nod dalam satu pernyataan:

                            
Salin
Benamkan
style nodeId1,nodeId2 styleList

Kelas

Lebih mudah daripada mentakrifkan gaya setiap kali ialah mentakrifkan satu kelas gaya, dan melampirkan kelas tersebut pada nod yang memerlukan rupa berbeza.

Definisi kelas adalah seperti yang ditunjukkan dalam contoh berikut:

                            
Salin
Benamkan
classDef className fill:pink,stroke:#333,stroke-width:4px

Berbilang kelas juga boleh ditakrifkan dalam satu pernyataan:

                            
Salin
Benamkan
classDef firstClassName,secondClassName font-size:12pt

Sintaks untuk melampirkan kelas pada nod adalah seperti berikut:

                            
Salin
Benamkan
class nodeId1 className

Anda juga boleh melampirkan satu kelas pada senarai nod dalam satu pernyataan:

                            
Salin
Benamkan
class nodeId1,nodeId2 className

Anda juga boleh melampirkan berbilang kelas serentak:

                            
Salin
Benamkan
class nodeId1,nodeId2 className1,className2

Cara mudah untuk menambah kelas ialah menggunakan operator ::: untuk melampirkan nama kelas pada nod, seperti berikut:

Kod
                            
Salin
Benamkan
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

Mengisytiharkan hubungan antara entiti boleh menggunakan sintaks berikut:

Kod
                            
Salin
Benamkan
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

Serupa dengan pernyataan class, sintaks pintas juga boleh menggunakan berbilang kelas pada satu masa:

                            
Salin
Benamkan
nodeId:::className1,className2

Kelas lalai

Jika sesuatu kelas dinamakan default, ia akan diberikan kepada semua nod yang tiada definisi kelas tertentu.

                            
Salin
Benamkan
classDef default fill:pink,stroke:#333,stroke-width:4px;

Nota: gaya tersuai daripada pernyataan gaya atau kelas lain mempunyai keutamaan, dan mengatasi gaya lalai. (Contohnya, kelas default menetapkan latar belakang merah jambu untuk nod, tetapi jika kelas blue digunakan, ia akan memberikan warna latar belakang biru kepada nod tersebut.)

Kod
                            
Salin
Benamkan
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

Konfigurasi

Susun atur

Susun atur carta dikendalikan oleh render(), susun atur lalai ialah susun atur ELK, sesuai untuk carta yang lebih besar dan lebih kompleks.

Untuk menukar kepada susun atur Dagre klasik, anda boleh menetapkannya dalam config YAML frontmatter

Kod
                            
Salin
Benamkan
--- config: layout: dagre ---

Kandungan kod Mermaid adalah seperti berikut:

Kod
                            
Salin
Benamkan
--- title: Order example config: layout: elk --- erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses