@startuml ' hide the spot hide circle ' avoid problems with angled crows feet skinparam linetype ortho entity "user" as user { *id : number <> -- *auth_id : text(50) ' *created: datetime ' *updated: datetime } entity tag { *id : number <> *tag_type_id -- *name: text } entity tag_type { *id : number <> -- *name: text } tag_type ||--o{ tag entity profile { *id : number <> *user_id -- *nick_name : text(25) pronouns : text(25) fullname: text(100) volunteerwork: text(4000) freetext: text(4000) visible: bool *created: datetime *updated: datetime } user ||-o{ profile : user_has_profile entity token { *id : number <> *user_id -- *token : text(36) } user ||-o{ token : user_has_token entity profile_address { *id : number <> *profile_id -- street: text(25) house_number: text(10) additional: text(25) postcode: text(10) city: text(25) country: text(25) } profile ||-o{ profile_address : profile_has_address entity profile_skill { *profile_id: id *skill_id: id -- *level: number } entity profile_language { *profile_id: id *language_id: id -- level: number } entity profile_experience { *id : number <> *profile_id -- description start: date end: date } entity profile_experience_experience { *profile_experience_id *experience_id } profile ||--o{ profile_experience : user_has_experience profile_experience ||--o{ profile_experience_experience : user_experience_is_tagged_with profile_experience_experience }o--|| tag entity user_search_topic { *user_id *topic_id -- } entity profile_contact { *id : number <> *profile_id *contact_type_id -- *content: text(200) } entity language { *id : number <> -- *name: text(25) } entity contact_type { *id : number <> -- *name: text(25) } profile ||--o{ profile_skill : user_has_skills profile_skill ||--o{ tag profile ||--o{ profile_language : user_speaks_language profile_language||--{ language user ||--o{ user_search_topic user_search_topic ||--o{ tag profile ||-o{ profile_contact profile_contact ||-o{ contact_type @enduml