Comments (6)
@fuelen tested it yesterday - works fine. Thanks!
from ecto_erd.
Hi @nivertech
Thank you for the suggestion. I'll try to add support for this format soon.
from ecto_erd.
@nivertech
Here is a result of my first prototype. It looks a bit weird.
Are there any recommendations how to make it better?
code
@startuml
left to right direction
' hide the spot
hide circle
hide methods
' avoid problems with angled crows feet
skinparam linetype ortho
entity "Hexpm.Accounts.AuditLog" {
id : integer
--
user_agent : varchar
action : varchar
params : jsonb
user_id : integer
organization_id : integer
inserted_at : timestamp
}
entity "Hexpm.Accounts.Email" {
id : integer
--
email : varchar
verified : boolean
primary : boolean
public : boolean
gravatar : boolean
verification_key : varchar
verification_expiry : timestamp
user_id : integer
inserted_at : timestamp
updated_at : timestamp
}
entity "Hexpm.Accounts.Key" {
id : integer
--
name : varchar
secret_first : varchar
secret_second : varchar
public : boolean
revoke_at : timestamp
revoked_at : timestamp
inserted_at : timestamp
updated_at : timestamp
last_use : jsonb
user_id : integer
organization_id : integer
permissions : jsonb
}
entity "Hexpm.Accounts.Key.Use" {
id : uuid
--
used_at : timestamp
user_agent : varchar
ip : varchar
}
entity "Hexpm.Accounts.KeyPermission" {
id : uuid
--
domain : varchar
resource : varchar
}
entity "Hexpm.Accounts.Organization" {
id : integer
--
name : varchar
billing_active : boolean
inserted_at : timestamp
updated_at : timestamp
}
entity "Hexpm.Accounts.OrganizationUser" {
id : integer
--
role : varchar
organization_id : integer
user_id : integer
inserted_at : timestamp
updated_at : timestamp
}
entity "Hexpm.Accounts.PasswordReset" {
id : integer
--
key : varchar
primary_email : varchar
user_id : integer
inserted_at : timestamp
}
entity "Hexpm.Accounts.RecoveryCode" {
id : uuid
--
code : varchar
used_at : timestamp
}
entity "Hexpm.Accounts.Session" {
id : integer
--
token : bytea
data : jsonb
inserted_at : timestamp
updated_at : timestamp
}
entity "Hexpm.Accounts.TFA" {
secret : varchar
tfa_enabled : boolean
app_enabled : boolean
recovery_codes : jsonb
}
entity "Hexpm.Accounts.User" {
id : integer
--
username : varchar
full_name : varchar
password : varchar
service : boolean
deactivated_at : timestamp
role : varchar
inserted_at : timestamp
updated_at : timestamp
handles : jsonb
tfa : jsonb
organization_id : integer
}
entity "Hexpm.Accounts.UserHandles" {
id : uuid
--
twitter : varchar
github : varchar
elixirforum : varchar
freenode : varchar
slack : varchar
}
entity "Hexpm.BlockAddress.Entry" {
id : integer
--
ip : varchar
comment : varchar
}
entity "Hexpm.Repository.Download" {
id : integer
--
release_id : integer
downloads : integer
day : date
}
entity "Hexpm.Repository.Install" {
id : integer
--
hex : varchar
elixirs : array
}
entity "Hexpm.Repository.Package" {
id : integer
--
name : varchar
docs_updated_at : timestamp
inserted_at : timestamp
updated_at : timestamp
repository_id : integer
meta : jsonb
}
entity "Hexpm.Repository.PackageDependant" {
id : integer
--
package_id : integer
name : varchar
repo : varchar
}
entity "Hexpm.Repository.PackageDownload" {
package_id : integer
view : varchar
downloads : integer
}
entity "Hexpm.Repository.PackageMetadata" {
id : uuid
--
description : varchar
licenses : array
links : jsonb
maintainers : array
extra : jsonb
}
entity "Hexpm.Repository.PackageOwner" {
id : integer
--
level : varchar
package_id : integer
user_id : integer
inserted_at : timestamp
updated_at : timestamp
}
entity "Hexpm.Repository.PackageReport" {
id : integer
--
state : varchar
description : varchar
author_id : integer
package_id : integer
inserted_at : timestamp
updated_at : timestamp
}
entity "Hexpm.Repository.PackageReportComment" {
id : integer
--
text : varchar
inserted_at : timestamp
updated_at : timestamp
package_report_id : integer
author_id : integer
}
entity "Hexpm.Repository.PackageReportRelease" {
id : integer
--
release_id : integer
package_report_id : integer
inserted_at : timestamp
updated_at : timestamp
}
entity "Hexpm.Repository.Release" {
id : integer
--
version : varchar
inner_checksum : bytea
outer_checksum : bytea
has_docs : boolean
inserted_at : timestamp
updated_at : timestamp
package_id : integer
publisher_id : integer
meta : jsonb
retirement : jsonb
}
entity "Hexpm.Repository.ReleaseDownload" {
release_id : integer
downloads : integer
}
entity "Hexpm.Repository.ReleaseMetadata" {
id : uuid
--
app : varchar
build_tools : array
elixir : varchar
}
entity "Hexpm.Repository.ReleaseRetirement" {
id : uuid
--
reason : varchar
message : varchar
}
entity "Hexpm.Repository.Repository" {
id : integer
--
name : varchar
public : boolean
inserted_at : timestamp
updated_at : timestamp
organization_id : integer
}
entity "Hexpm.Repository.Requirement" {
id : integer
--
app : varchar
requirement : varchar
optional : boolean
release_id : integer
dependency_id : integer
}
entity "Hexpm.ShortURLs.ShortURL" {
id : integer
--
url : varchar
short_code : varchar
inserted_at : timestamp
}
entity "Ecto.Migration.SchemaMigration" {
version : integer
inserted_at : timestamp
}
"Hexpm.Repository.Package" ||-o| "Hexpm.Repository.PackageMetadata"
"Hexpm.Accounts.User" ||-|{ "Hexpm.Accounts.Email"
"Hexpm.Repository.Package" ||-|{ "Hexpm.Repository.PackageOwner"
"Hexpm.Accounts.Organization" ||-|{ "Hexpm.Accounts.AuditLog"
"Hexpm.Accounts.User" ||-o| "Hexpm.Accounts.TFA"
"Hexpm.Accounts.User" ||-|{ "Hexpm.Repository.PackageReportComment"
"Hexpm.Accounts.Organization" ||-|{ "Hexpm.Accounts.Key"
"Hexpm.Accounts.Organization" ||-|{ "Hexpm.Accounts.OrganizationUser"
"Hexpm.Accounts.User" ||-|{ "Hexpm.Accounts.OrganizationUser"
"Hexpm.Accounts.Organization" ||-o| "Hexpm.Repository.Repository"
"Hexpm.Accounts.User" ||-|{ "Hexpm.Repository.PackageReport"
"Hexpm.Repository.Package" ||-|{ "Hexpm.Repository.PackageReport"
"Hexpm.Repository.Release" ||-|{ "Hexpm.Repository.Download"
"Hexpm.Repository.Package" ||-|{ "Hexpm.Repository.Release"
"Hexpm.Accounts.User" ||-|{ "Hexpm.Accounts.Key"
"Hexpm.Accounts.Key" ||-|{ "Hexpm.Accounts.KeyPermission"
"Hexpm.Accounts.Organization" ||-o| "Hexpm.Accounts.User"
"Hexpm.Repository.PackageReport" ||-|{ "Hexpm.Repository.PackageReportComment"
"Hexpm.Accounts.TFA" ||-|{ "Hexpm.Accounts.RecoveryCode"
"Hexpm.Accounts.User" ||-|{ "Hexpm.Accounts.PasswordReset"
"Hexpm.Repository.Release" ||-o| "Hexpm.Repository.ReleaseDownload"
"Hexpm.Repository.Release" ||-|{ "Hexpm.Repository.Requirement"
"Hexpm.Repository.Release" ||-|{ "Hexpm.Repository.PackageReportRelease"
"Hexpm.Accounts.User" ||-o| "Hexpm.Accounts.UserHandles"
"Hexpm.Repository.Package" ||-|{ "Hexpm.Repository.Requirement"
"Hexpm.Repository.Release" ||-o| "Hexpm.Repository.ReleaseMetadata"
"Hexpm.Repository.Release" ||-o| "Hexpm.Repository.ReleaseRetirement"
"Hexpm.Repository.PackageReport" ||-|{ "Hexpm.Repository.PackageReportRelease"
"Hexpm.Accounts.User" ||-|{ "Hexpm.Repository.Release"
"Hexpm.Accounts.Key" ||-o| "Hexpm.Accounts.Key.Use"
"Hexpm.Repository.Repository" ||-|{ "Hexpm.Repository.Package"
"Hexpm.Repository.Package" ||-|{ "Hexpm.Repository.PackageDownload"
"Hexpm.Accounts.User" ||-|{ "Hexpm.Repository.PackageOwner"
"Hexpm.Accounts.User" ||-|{ "Hexpm.Accounts.AuditLog"
"Hexpm.Repository.Package" ||-|{ "Hexpm.Repository.PackageDependant"
@enduml
from ecto_erd.
@fuelen Hexpm is a large example. ERD is an extension of Class Diagrams [1]. There is some limited layout support [2]
[1] https://plantuml.com/class-diagram
[2] https://plantuml.com/class-diagram#c08f8d9927fcb626
Maybe you can use namespaces or packages to group entities together:
http://alphadoc.plantuml.com/doc/dokuwiki/en/class-diagram#lpfxhwn73pnmk362kj9v
from ecto_erd.
@nivertech thanks for the links.
I found, that usage of ||--o|
and ||--|{
instead of ||-o|
and ||-|{
makes everything nice
from ecto_erd.
@nivertech published version v0.4.0 with PlantUML support.
from ecto_erd.
Related Issues (12)
- Examples generator compilation error HOT 1
- Ecto.Enum types not supported HOT 1
- Support Mermaid HOT 5
- Styles configuration HOT 4
- Include database indexes in the ERD HOT 1
- Errors when running inside an umbrella application HOT 5
- Document and improve ExDoc usage HOT 4
- missing composite indexes in dbml HOT 1
- Support AML
- Is it possible to pretty-print the Graphviz / dot output (including HTML inside)? HOT 1
- task crashes when run HOT 7
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ecto_erd.