Skip to content

Instantly share code, notes, and snippets.

@QuantumGhost
Last active March 23, 2024 22:39
Show Gist options
  • Save QuantumGhost/0955a45383a0b6c0bc24f9654b3cb561 to your computer and use it in GitHub Desktop.
Save QuantumGhost/0955a45383a0b6c0bc24f9654b3cb561 to your computer and use it in GitHub Desktop.
A simple template for PlantUML to draw ER diagram.The basic idea comes from http://plantuml.sourceforge.net/qa/?qa=331/database-modeling
@startuml
' uncomment the line below if you're using computer with a retina display
' skinparam dpi 300
!define Table(name,desc) class name as "desc" << (T,#FFAAAA) >>
' we use bold for primary key
' green color for unique
' and underscore for not_null
!define primary_key(x) <b>x</b>
!define unique(x) <color:green>x</color>
!define not_null(x) <u>x</u>
' other tags available:
' <i></i>
' <back:COLOR></color>, where color is a color name or html color code
' (#FFAACC)
' see: http://plantuml.com/classes.html#More
hide methods
hide stereotypes
' entities
Table(user, "user\n(User in our system)") {
primary_key(id) INTEGER
not_null(unique(username)) VARCHAR[32]
not_null(password) VARCHAR[64]
}
Table(session, "session\n(session for user)") {
primary_key(id) INTEGER
not_null(user_id) INTEGER
not_null(unique(session_id)) VARCHAR[64]
}
Table(user_profile, "user_profile\n(Some info of user)") {
primary_key(user_id) INTEGER
age SMALLINT
gender SMALLINT
birthday DATETIME
}
Table(group, "group\n(group of users)") {
primary_key(id) INTEGER
not_null(name) VARCHAR[32]
}
Table(user_group, "user_group\n(relationship of user and group)") {
primary_key(user_id) INTEGER
primary_key(group_id) INTEGER
joined_at DATETIME
}
' relationships
' one-to-one relationship
user -- user_profile : "A user only \nhas one profile"
' one to may relationship
user --> session : "A user may have\n many sessions"
' many to many relationship
' Add mark if you like
user "1" --> "*" user_group : "A user may be \nin many groups"
group "1" --> "0..N" user_group : "A group may \ncontain many users"
@enduml
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@startuml
' uncomment the line below if you're using computer with a retina display
' skinparam dpi 300
!define Table(name,desc) class name as "desc" << (T,#FFAAAA) >>
' we use bold for primary key
' green color for unique
' and underscore for not_null
!define primary_key(x) <b>x</b>
!define unique(x) <color:green>x</color>
!define not_null(x) <u>x</u>
' other tags available:
' <i></i>
' <back:COLOR></color>, where color is a color name or html color code
' (#FFAACC)
' see: http://plantuml.com/classes.html#More
hide methods
hide stereotypes
' entities
' relationships
@enduml
@tim-rohrer
Copy link

tim-rohrer commented Dec 3, 2017

Nice!

I'm researching, but is there a way to add lengths to the field types? For example, CHAR(2)? I realize could do something like CHAR-2, but it would be nice to put them in parens.

Also, I'm experimenting with foreign keys...

@Potherca
Copy link

Potherca commented Mar 9, 2018

@tim-rohrer You could use:

!define VARCHAR(x) <color:gray>VARCHAR(x)</color>

@olgapshen
Copy link

olgapshen commented Mar 22, 2018

if "desc" - will omit quotes it will break NetBeans plugin, but if descriptions in Tables will omit quotes it will works both on CLI and NetBeans.
https://stackoverflow.com/questions/49423335/sintax-error-in-plantuml

@ityoung
Copy link

ityoung commented Feb 18, 2019

Nice work!

@NewAlexandria
Copy link

You can show one-to-many relations using the more-common 'bird foot' line notation, supported in plantUML now:

user "1" *--+ "many" user_group : has many groups through >

@QuantumGhost
Copy link
Author

You can show one-to-many relations using the more-common 'bird foot' line notation, supported in plantUML now:

user "1" *--+ "many" user_group : has many groups through >

Nice!

@pavelvrublevskij
Copy link

pavelvrublevskij commented Oct 7, 2019

Please fix 30 line:
not_null(unique(session_id) VARCHAR[64]
to
not_null(unique(session_id)) VARCHAR[64]

@QuantumGhost
Copy link
Author

@pavelvrublevskij Fixed. Thanks for mentioning.

@xinyifly
Copy link

Have you gave Information Engineering notation a try? https://plantuml.com/ie-diagram

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment