Diagram Alur
Ekspresi grafis
Peta Pikiran
Ekspresi terstruktur
Catatan
Ekspresi yang efisien

Diagram ERSintaks

Diagram ER

Diagram relasi entitas (disingkat diagram ER) mendeskripsikan hal-hal yang menjadi perhatian dan saling terkait dalam bidang pengetahuan tertentu. Sebuah diagram ER dasar terdiri dari jenis entitas (untuk mengklasifikasikan hal-hal yang menjadi perhatian), dan menentukan relasi yang dapat ada antar entitas (instance dari jenis entitas tersebut),Perlu diperhatikan bahwa dalam praktik diagram ER, hampir selalu menyebut "jenis entitas" sebagai "entitas". Misalnya, "jenis entitas CUSTOMER" biasanya langsung disebut "entitas CUSTOMER". Praktik ini sangat umum, sehingga cara lain tidak disarankan; namun secara teknis, entitas adalah instance abstrak dari jenis entitas, dan diagram ER menampilkan instance abstrak tersebut beserta relasi di antaranya. Inilah alasan mengapa entitas selalu dinamai menggunakan kata benda tunggal.

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

Nama entitas biasanya menggunakan huruf kapital, meskipun tidak ada standar yang diakui untuk hal ini, dan sintaks Mermaid juga tidak mewajibkannya.

Relasi antar entitas direpresentasikan dengan garis yang memiliki penanda ujung yang menunjukkan kardinalitas. Mermaid menggunakan notasi kaki gagak yang paling populer; kaki gagak secara visual menunjukkan bahwa entitas yang terhubung dengannya mungkin memiliki beberapa instance.

Diagram ER dapat digunakan untuk berbagai keperluan, mulai dari model logis abstrak yang tidak memuat detail implementasi apa pun, hingga model fisik tabel basis data relasional. Menyertakan definisi atribut pada diagram ER membantu memahami kegunaan dan makna entitas; definisi atribut ini tidak harus lengkap, biasanya sebagian kecil atribut sudah cukup. Mermaid memungkinkan pendefinisiannya berdasarkan jenis dan namanya.

Kode
                            
Salin
Sematkan
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 }

Saat menyertakan atribut pada diagram ER, Anda harus memutuskan apakah akan menyertakan kunci asing sebagai atribut, yang mungkin bergantung pada sejauh mana Anda ingin merepresentasikan struktur tabel relasional. Jika diagram Anda adalah model logis dan tidak dimaksudkan untuk menyiratkan implementasi relasional, sebaiknya jangan menyertakan atribut tersebut, karena relasi asosiasi sudah menyampaikan cara entitas terkait. Misalnya, struktur data JSON dapat mengimplementasikan relasi satu-ke-banyak menggunakan larik tanpa atribut kunci asing. Serupa dengan itu, bahasa pemrograman berorientasi objek dapat menggunakan pointer atau referensi ke koleksi. Bahkan untuk model yang ditujukan untuk implementasi relasional, menyertakan atribut kunci asing mungkin dianggap menduplikasi informasi yang sudah ditampilkan oleh relasi, dan tidak menambah makna pada entitas.

Sintaks

Entitas dan relasi

Sintaks Mermaid untuk diagram ER kompatibel dengan PlantUML, dan diperluas dengan fitur untuk menandai relasi. Setiap pernyataan mencakup hal-hal berikut:

                            
Salin
Sematkan
<first-entity> [<relationship> <second-entity> : <relationship-label>]
  • first-entity adalah nama entitas pertama. Nama mendukung karakter Unicode apa pun, dan jika dibungkus dengan tanda kutip ganda, dapat berisi spasi.
  • relationship mendeskripsikan hubungan timbal balik antara dua entitas.
  • second-entity adalah nama entitas lainnya.
  • relationship-label mendeskripsikan relasi dari sudut pandang entitas pertama.

Misalnya:

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

Pernyataan ini dapat dipahami sebagai: sebuah properti berisi satu atau lebih kamar, sedangkan satu kamar hanya milik satu properti. Label di sini dilihat dari sudut pandang entitas pertama: sebuah properti berisi sebuah kamar, tetapi sebuah kamar tidak berisi properti. Dari sudut pandang entitas kedua, label yang setara biasanya mudah disimpulkan.

Hanya bagian first-entity yang bersifat wajib. Hal ini memungkinkan menampilkan entitas tanpa relasi, yang sangat berguna saat membangun diagram secara iteratif. Jika bagian lain dari pernyataan ditentukan, maka semua bagian bersifat wajib.

Teks Unicode

Nama entitas, relasi, dan atribut semuanya mendukung teks unicode.

Kode
                            
Salin
Sematkan
erDiagram "This ❤ Unicode"

Sintaks relasi

Bagian relasi pada setiap pernyataan dapat dipecah menjadi tiga subbagian:

  • Kardinalitas entitas pertama terhadap entitas kedua
  • Apakah relasi tersebut memberikan identifikasi pada entitas anak
  • Kardinalitas entitas kedua terhadap entitas pertama

Kardinalitas adalah atribut yang mendeskripsikan jumlah elemen entitas lain yang dapat dikaitkan dengan entitas yang bersangkutan. Pada contoh di atas, satu PROPERTY dapat dikaitkan dengan satu atau lebih instance ROOM, sedangkan satu ROOM hanya dapat dikaitkan dengan satu PROPERTY. Setiap penanda kardinalitas memiliki dua karakter; karakter paling luar merepresentasikan nilai maksimum, dan karakter paling dalam merepresentasikan nilai minimum. Tabel berikut merangkum kemungkinan kardinalitas:

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

Identifikasi

Relasi dapat dibagi menjadi mengidentifikasi dan tidak mengidentifikasi, masing-masing dirender dengan garis padat atau garis putus-putus. Hal ini penting ketika salah satu entitas tidak dapat berdiri sendiri tanpa entitas lainnya. Misalnya, sebuah perusahaan yang menyediakan asuransi untuk orang yang mengemudikan mobil mungkin perlu menyimpan data NAMED-DRIVER. Saat memodelkan, kita mungkin pertama-tama mengamati bahwa satu CAR dapat dikemudikan oleh banyak PERSON, dan satu PERSON dapat mengemudikan banyak CAR, keduanya dapat berdiri sendiri tanpa satu sama lain, sehingga ini adalah relasi non-identifikasi, yang dapat kita tentukan dalam Mermaid sebagai: PERSON }|..|{ CAR : "driver". Perhatikan dua titik di tengah relasi, ini akan menyebabkan garis putus-putus digambar antara kedua entitas. Namun, ketika relasi banyak-ke-banyak ini diuraikan menjadi dua relasi satu-ke-banyak, kita mengamati bahwa NAMED-DRIVER tidak mungkin ada tanpa PERSON dan CAR. Relasi ini menjadi relasi identifikasi, dan akan dilambangkan dengan tanda hubung, yang sesuai dengan garis padat:

Nilai Alias
-- Mengidentifikasi
.. Tidak mengidentifikasi
Alias
Nilai 别名为
to Mengidentifikasi
optionally to Tidak mengidentifikasi
Kode
                            
Salin
Sematkan
erDiagram CAR ||--o{ NAMED-DRIVER : allows PERSON }o..o{ NAMED-DRIVER : is
Kode
                            
Salin
Sematkan
erDiagram CAR ||--o{ NAMED-DRIVER : allows PERSON }o--o{ NAMED-DRIVER : is

Atribut

Atribut dapat didefinisikan untuk entitas dengan menentukan nama entitas, lalu diikuti blok yang berisi beberapa type name, di mana blok tersebut diapit oleh kurung kurawal {}. Atribut akan ditampilkan di dalam kotak entitas, misalnya:

Kode
                            
Salin
Sematkan
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 harus diawali dengan karakter huruf, dan dapat berisi angka, tanda hubung, garis bawah, tanda kurung biasa, dan tanda kurung siku. Nilai name mengikuti format yang serupa dengan type, tetapi juga dapat diawali dengan tanda bintang, sebagai opsi lain untuk menunjukkan bahwa atribut tersebut adalah kunci utama. Selain itu, tidak ada batasan lain, dan tidak ada kumpulan jenis data valid yang tersirat.

Alias entitas

Anda dapat menambahkan alias pada entitas menggunakan tanda kurung siku. Jika alias diberikan, diagram akan menampilkan alias alih-alih nama entitas; alias mengikuti semua aturan yang sama seperti nama entitas.

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

Kunci dan komentar atribut

Atribut juga dapat mendefinisikan kunci atau komentar. Kunci dapat berupa kunci utama (PK), kunci asing (FK), atau kunci unik (UK). Untuk menentukan beberapa batasan kunci pada satu atribut, pisahkan dengan koma (misalnya, PK, FK). Komentar didefinisikan melalui tanda kutip ganda di akhir atribut; komentar tidak boleh berisi karakter tanda kutip ganda.

Kode
                            
Salin
Sematkan
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 mendeklarasikan arah diagram.

TB mendeklarasikan arah diagram dari atas ke bawah, BT dapat membalikkannya menjadi dari bawah ke atas.

Kode
                            
Salin
Sematkan
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 mendeklarasikan arah diagram dari kiri ke kanan, RL dapat membalikkannya menjadi dari kanan ke kiri.

Kode
                            
Salin
Sematkan
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 }

Mengatur gaya simpul

Anda dapat menerapkan gaya tertentu pada simpul, misalnya batas yang lebih tebal atau warna latar belakang yang berbeda.

Kode
                            
Salin
Sematkan
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

Anda juga dapat melampirkan gaya pada daftar simpul dalam satu pernyataan:

                            
Salin
Sematkan
style nodeId1,nodeId2 styleList

Kelas

Lebih praktis daripada mendefinisikan gaya setiap kali, Anda dapat mendefinisikan kelas gaya dan melampirkan kelas tersebut pada simpul yang memerlukan tampilan berbeda.

Definisi kelas seperti yang ditunjukkan pada contoh berikut:

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

Anda juga dapat mendefinisikan beberapa kelas dalam satu pernyataan:

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

Sintaks untuk melampirkan kelas pada simpul adalah sebagai berikut:

                            
Salin
Sematkan
class nodeId1 className

Anda juga dapat melampirkan satu kelas pada daftar simpul dalam satu pernyataan:

                            
Salin
Sematkan
class nodeId1,nodeId2 className

Anda juga dapat melampirkan beberapa kelas sekaligus:

                            
Salin
Sematkan
class nodeId1,nodeId2 className1,className2

Cara praktis untuk menambahkan kelas adalah menggunakan operator ::: untuk melampirkan nama kelas pada simpul, seperti yang ditunjukkan di bawah ini:

Kode
                            
Salin
Sematkan
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

Untuk mendeklarasikan relasi antar entitas, Anda dapat menggunakan sintaks berikut:

Kode
                            
Salin
Sematkan
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 singkat juga dapat menerapkan beberapa kelas sekaligus:

                            
Salin
Sematkan
nodeId:::className1,className2

Kelas bawaan

Jika sebuah kelas dinamai default, kelas tersebut akan ditugaskan ke semua kelas yang tidak memiliki definisi kelas khusus.

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

Catatan: gaya khusus dari pernyataan gaya atau kelas lain memiliki prioritas, dan menimpa gaya bawaan. (Misalnya, kelas default menetapkan latar belakang merah muda untuk simpul, tetapi jika kelas blue diterapkan, akan memberikan warna latar belakang biru untuk simpul tersebut.)

Kode
                            
Salin
Sematkan
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

Tata letak

Tata letak diagram ditangani oleh render(), tata letak bawaannya adalah tata letak ELK, cocok untuk diagram yang lebih besar dan lebih kompleks.

Untuk beralih ke tata letak Dagre klasik, Anda dapat mengaturnya di config pada YAML frontmatter

Kode
                            
Salin
Sematkan
--- config: layout: dagre ---

Konten kode Mermaid adalah sebagai berikut:

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