Giter Club home page Giter Club logo

Comments (6)

nivertech avatar nivertech commented on June 13, 2024 1

@fuelen tested it yesterday - works fine. Thanks!

from ecto_erd.

fuelen avatar fuelen commented on June 13, 2024

Hi @nivertech
Thank you for the suggestion. I'll try to add support for this format soon.

from ecto_erd.

fuelen avatar fuelen commented on June 13, 2024

@nivertech
Here is a result of my first prototype. It looks a bit weird.
Are there any recommendations how to make it better?

image

зображення

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.

nivertech avatar nivertech commented on June 13, 2024

@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.

fuelen avatar fuelen commented on June 13, 2024

@nivertech thanks for the links.
I found, that usage of ||--o| and ||--|{ instead of ||-o| and ||-|{ makes everything nice 🙂

from ecto_erd.

fuelen avatar fuelen commented on June 13, 2024

@nivertech published version v0.4.0 with PlantUML support.

from ecto_erd.

Related Issues (12)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.