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.
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.
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.
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) |
| 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 |
| Nilai | 别名为 |
|---|---|
| to | Pengenalan |
| optionally to | Bukan pengenalan |
Salin
Benamkan
erDiagram
CAR ||--o{ NAMED-DRIVER : allows
PERSON }o..o{ NAMED-DRIVER : is
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:
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.
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.
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.
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.
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.
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:
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:
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.)
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
Salin
Benamkan
---
config:
layout: dagre
---
Kandungan kod Mermaid adalah seperti berikut:
Salin
Benamkan
---
title: Order example
config:
layout: elk
---
erDiagram
CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ LINE-ITEM : contains
CUSTOMER }|..|{ DELIVERY-ADDRESS : uses