Back to articles list
- 5 minutes read

Upcoming Changes in Vertabelo Team Account

We listened to your feedback and improved managing Vertabelo team accounts. No more confusing switching back and forth between personal and team accounts. And since Vertabelo is all about modeling, we couldn’t stop ourselves from using database models to explain the upcoming changes.

In the next couple of days we will introduce major changes to the way we handle Vertabelo team accounts. After the changes are implemented, each user account will either be a personal account or be a member of a team account.

What Does This Change Mean?

Today, each user must have a personal account. In addition to the personal account, a user can be a member of a team account. The database models can belong either to a personal account or to a team account. In order to work on the right set of models, you have to switch to the appropriate account first.

Old database schema for sharing models amongs Vertabelo team accounts users

We noticed that users find switching back and forth confusing and we decided to simplify the situation.

The upcoming changes do away with the need to have a personal account in addition to a team account.

What Will Happen to Your Models

  • If you only have a personal account, the changes will not affect you. All of your models will stay in your personal account.

  • If you have a personal account and you are a member of a team account, your personal account will be removed. From that moment, you will have just one account – your team account.

    As for your models, there are two cases:

    1. If all your models are in a team account, your personal account without any models will be removed. All your models will stay in your team account.

    2. If you have some models in your personal account at the moment, you will have to transfer them to your team account. Just follow this instruction:

      Models that were in your personal account will no longer be accessible from your Dashboard. Instead, a special screen will allow you to transfer them to the team account, or download for future use. This option will be available only till the end of August. So make sure you transfer your models to the team account or download them before August 31, 2015.

What Will Happen to Your Subscription

  • If you only have a personal account subscription, nothing happens to your subscription.
  • If you only have a team account subscription, nothing happens to your subscription.
  • If you have both a personal account subscription and a team account subscription, your personal account subscription will be cancelled by us. Your team account subscription will stay valid.

The Changes Under the Hood

The new database structure, simplified significantly of course, looks like this:




Each user_account is associated with at most one account. There are two account_types: personal account and team account. An account is the entity responsible for choosing the right account plan and payment for this plan. That’s why the billing_info is related to the account table.

Each account has its own account plan. All existing account plans are kept in the account_plan table. The current association between the account and its plan is kept in current_account_plan table.

For comparison, in the old database structure, personal accounts and team accounts (called company accounts in the database) were completely separate.


{"leftTopX": 1500, "leftTopY": 1070, "rightBottomX": 3339, "rightBottomY": 3748}Accounts v1Personal account v1Sharing models v1Accounts v1Company accountNotifications v1account_planidcodenameint4varchar(50)varchar(100)PKbilling_infouser_account_idcompany_namefirst_namelast_nameemail_addressaddresscredit_card_last_digitscredit_card_expires_yearcredit_card_expires_monthint4varchar(1000)varchar(255)varchar(255)varchar(255)varchar(1000)varchar(4)int4int4PK FKcurrent_account_planuser_account_idaccount_plan_idactivation_datevalid_toint4int4timestamptimestampPK FKFKNmodelidgidcreator_idcompany_account_idnamedescriptioncreation_datemodification_datedeletion_dateint4varchar(64)int4intvarchar(100)texttimestamptimestamptimestampPKN FKN FKNNmodel_shareidmodel_iduser_account_idcompany_account_member_idshare_type_idsinceint4int4int4intint4timestampPKFKN FKN FKFKshare_typeidcodenameint4varchar(50)varchar(100)PKuser_account:Sharing models v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PKuser_account:Accounts v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PKcompany_account:Accounts v1idcompany_namecreation_datedeletion_dateintvarchar(100)timestamptimestampPKNcompany_account_member_rolecompany_account_member_idcompany_user_role_idintintPK FKPK FKcompany_user_roleidcodenameintvarchar(50)varchar(50)PKcompany_account_member:Accounts v1idcompany_account_iduser_account_idsinceintintinttimestampPKFKFKcompany_billing_infocompany_account_idcompany_namefirst_namelast_nameemail_addressaddresscredit_card_last_digitscredit_card_expires_yearcredit_card_expires_monthintvarchar(1000)varchar(255)varchar(255)varchar(255)varchar(1000)varchar(4)intintPK FKcompany_account_planidcodenameintvarchar(50)varchar(100)PKcurrent_company_account_plancompany_account_idcompany_account_plan_idactivation_datevalid_tointint4timestamptimestampPK FKFKNcompany_account:Sharing models vidcompany_namecreation_datedeletion_dateintvarchar(100)timestamptimestampPKNuser_account:Notifications v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PKnotification_typeidcodenamedescriptionintvarchar(100)varchar(100)varchar(1000)PKnotificationiduser_account_idcompany_account_member_idnotification_type_idcontentdatewas_viewedwas_readintint4intintvarchar(1000)timestampboolboolPKN FKN FKFKcompany_account_member:Sharing models idcompany_account_iduser_account_idsinceintintinttimestampPKFKFKcompany_account_member:Notifications idcompany_account_iduser_account_idsinceintintinttimestampPKFKFKuser_account:Accounts v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PK



EDIT MODEL IN YOUR BROWSER
{"leftTopX": 1500, "leftTopY": 1070, "rightBottomX": 3339, "rightBottomY": 3748}Accounts v1Personal account v1Sharing models v1Accounts v1Company accountNotifications v1account_planidcodenameint4varchar(50)varchar(100)PKbilling_infouser_account_idcompany_namefirst_namelast_nameemail_addressaddresscredit_card_last_digitscredit_card_expires_yearcredit_card_expires_monthint4varchar(1000)varchar(255)varchar(255)varchar(255)varchar(1000)varchar(4)int4int4PK FKcurrent_account_planuser_account_idaccount_plan_idactivation_datevalid_toint4int4timestamptimestampPK FKFKNmodelidgidcreator_idcompany_account_idnamedescriptioncreation_datemodification_datedeletion_dateint4varchar(64)int4intvarchar(100)texttimestamptimestamptimestampPKN FKN FKNNmodel_shareidmodel_iduser_account_idcompany_account_member_idshare_type_idsinceint4int4int4intint4timestampPKFKN FKN FKFKshare_typeidcodenameint4varchar(50)varchar(100)PKuser_account:Sharing models v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PKuser_account:Accounts v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PKcompany_account:Accounts v1idcompany_namecreation_datedeletion_dateintvarchar(100)timestamptimestampPKNcompany_account_member_rolecompany_account_member_idcompany_user_role_idintintPK FKPK FKcompany_user_roleidcodenameintvarchar(50)varchar(50)PKcompany_account_member:Accounts v1idcompany_account_iduser_account_idsinceintintinttimestampPKFKFKcompany_billing_infocompany_account_idcompany_namefirst_namelast_nameemail_addressaddresscredit_card_last_digitscredit_card_expires_yearcredit_card_expires_monthintvarchar(1000)varchar(255)varchar(255)varchar(255)varchar(1000)varchar(4)intintPK FKcompany_account_planidcodenameintvarchar(50)varchar(100)PKcurrent_company_account_plancompany_account_idcompany_account_plan_idactivation_datevalid_tointint4timestamptimestampPK FKFKNcompany_account:Sharing models vidcompany_namecreation_datedeletion_dateintvarchar(100)timestamptimestampPKNuser_account:Notifications v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PKnotification_typeidcodenamedescriptionintvarchar(100)varchar(100)varchar(1000)PKnotificationiduser_account_idcompany_account_member_idnotification_type_idcontentdatewas_viewedwas_readintint4intintvarchar(1000)timestampboolboolPKN FKN FKFKcompany_account_member:Sharing models idcompany_account_iduser_account_idsinceintintinttimestampPKFKFKcompany_account_member:Notifications idcompany_account_iduser_account_idsinceintintinttimestampPKFKFKuser_account:Accounts v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PK


Let’s start with personal accounts.

All personal account plans were kept in account_plan table. Each user_account had its own billing information and its own association with account plan in table current_account_plan.

The company accounts were a bit more complicated. The company account plans were kept, rather unsurprisingly, in the company_account_plan table. Each company_account has their own company_account_billing_info and its own current_company_account_plan.

Each user_account could be a member of multiple company accounts. The association between user_account and company_account was kept in the company_account_member table.

Model Sharing: Before and After

The changes to the accounts also influence the model sharing structure of the database. Sharing information is kept in an association table called model_share. In the old version it was an association table between

  • model
  • either a user_account or company_account_member table, with suitable constraints, of course.

Company models also had an association with company_account (a denormalization of the model for efficiency reasons).


{"leftTopX": 1500, "leftTopY": 1070, "rightBottomX": 3339, "rightBottomY": 3748}Accounts v1Personal account v1Sharing models v1Accounts v1Company accountNotifications v1account_planidcodenameint4varchar(50)varchar(100)PKbilling_infouser_account_idcompany_namefirst_namelast_nameemail_addressaddresscredit_card_last_digitscredit_card_expires_yearcredit_card_expires_monthint4varchar(1000)varchar(255)varchar(255)varchar(255)varchar(1000)varchar(4)int4int4PK FKcurrent_account_planuser_account_idaccount_plan_idactivation_datevalid_toint4int4timestamptimestampPK FKFKNmodelidgidcreator_idcompany_account_idnamedescriptioncreation_datemodification_datedeletion_dateint4varchar(64)int4intvarchar(100)texttimestamptimestamptimestampPKN FKN FKNNmodel_shareidmodel_iduser_account_idcompany_account_member_idshare_type_idsinceint4int4int4intint4timestampPKFKN FKN FKFKshare_typeidcodenameint4varchar(50)varchar(100)PKuser_account:Sharing models v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PKuser_account:Accounts v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PKcompany_account:Accounts v1idcompany_namecreation_datedeletion_dateintvarchar(100)timestamptimestampPKNcompany_account_member_rolecompany_account_member_idcompany_user_role_idintintPK FKPK FKcompany_user_roleidcodenameintvarchar(50)varchar(50)PKcompany_account_member:Accounts v1idcompany_account_iduser_account_idsinceintintinttimestampPKFKFKcompany_billing_infocompany_account_idcompany_namefirst_namelast_nameemail_addressaddresscredit_card_last_digitscredit_card_expires_yearcredit_card_expires_monthintvarchar(1000)varchar(255)varchar(255)varchar(255)varchar(1000)varchar(4)intintPK FKcompany_account_planidcodenameintvarchar(50)varchar(100)PKcurrent_company_account_plancompany_account_idcompany_account_plan_idactivation_datevalid_tointint4timestamptimestampPK FKFKNcompany_account:Sharing models vidcompany_namecreation_datedeletion_dateintvarchar(100)timestamptimestampPKNuser_account:Notifications v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PKnotification_typeidcodenamedescriptionintvarchar(100)varchar(100)varchar(1000)PKnotificationiduser_account_idcompany_account_member_idnotification_type_idcontentdatewas_viewedwas_readintint4intintvarchar(1000)timestampboolboolPKN FKN FKFKcompany_account_member:Sharing models idcompany_account_iduser_account_idsinceintintinttimestampPKFKFKcompany_account_member:Notifications idcompany_account_iduser_account_idsinceintintinttimestampPKFKFKuser_account:Accounts v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PK


Here is the new database:


EDIT MODEL IN YOUR BROWSER
{"leftTopX": 1623, "leftTopY": 1374, "rightBottomX": 2604, "rightBottomY": 3748}Notifications v2Account v2Sharing models v2account_planidcodenameaccount_type_idmodel_limittable_limitint4varchar(50)varchar(100)intint4int4PKFKbilling_infoaccount_idcompany_namefirst_namelast_nameemail_addressaddresscredit_card_last_digitscredit_card_expires_yearcredit_card_expires_monthint4varchar(1000)varchar(255)varchar(255)varchar(255)varchar(1000)varchar(4)int4int4PK FKcurrent_account_planaccount_idaccount_plan_idactivation_datevalid_toint4int4timestamptimestampPK FKFKNmodelidcreator_idnamedescriptioncreation_datemodification_datedeletion_dateint4int4varchar(100)texttimestamptimestamptimestampPKN FKNNmodel_shareiduser_account_idmodel_access_idshare_type_idsinceint4int4int4int4timestampPKFKFKFKshare_typeidcodenameint4varchar(50)varchar(100)PKaccount_roleidcodenameint4varchar(50)varchar(50)PKuser_account:Notifications v2idaccount_idemailpasswordfull_nameint4int4varchar(100)varchar(200)varchar(100)PKN FKnotification_typeidcodenamedescriptionintvarchar(100)varchar(100)varchar(1000)PKnotificationiduser_account_idnotification_type_idcontentdatewas_viewedwas_readintint4intvarchar(1000)timestampboolboolPKFKFKaccount:Account v2idaccount_type_idnamecreation_datedeletion_dateint4intvarchar(100)timestamptimestampPKFKNuser_account_roleuser_account_idaccount_role_idaccount_idint4int4int4PK FKPK FKPK FKmodel_accessidmodel_idaccount_idint4int4int4PKFKFKaccount_typeidcodenameintvarchar(20)varchar(20)PKuser_account:Account v2idaccount_idemailpasswordfull_nameint4int4varchar(100)varchar(200)varchar(100)PKN FKuser_account:Sharing models v2idaccount_idemailpasswordfull_nameint4int4varchar(100)varchar(200)varchar(100)PKN FKaccount:Sharing models v2idaccount_type_idnamecreation_datedeletion_dateint4intvarchar(100)timestamptimestampPKFKN


The models can now be shared between the accounts. Each model share is associated with

  • the model, as before
  • the user_account table.

The association between the model and the account is kept in the model_access table.

Further Changes in Database Structure

The changes in the account structure propagate to other places of the database. One example is the handling of notifications. You receive Vertabelo notifications when you get invited to share the model, your invitation is accepted, and so on. The notifications are stored in the database.

The new notification is always associated with a user account:

EDIT MODEL IN YOUR BROWSER
{"leftTopX": 1623, "leftTopY": 1374, "rightBottomX": 2604, "rightBottomY": 3748}Notifications v2Account v2Sharing models v2account_planidcodenameaccount_type_idmodel_limittable_limitint4varchar(50)varchar(100)intint4int4PKFKbilling_infoaccount_idcompany_namefirst_namelast_nameemail_addressaddresscredit_card_last_digitscredit_card_expires_yearcredit_card_expires_monthint4varchar(1000)varchar(255)varchar(255)varchar(255)varchar(1000)varchar(4)int4int4PK FKcurrent_account_planaccount_idaccount_plan_idactivation_datevalid_toint4int4timestamptimestampPK FKFKNmodelidcreator_idnamedescriptioncreation_datemodification_datedeletion_dateint4int4varchar(100)texttimestamptimestamptimestampPKN FKNNmodel_shareiduser_account_idmodel_access_idshare_type_idsinceint4int4int4int4timestampPKFKFKFKshare_typeidcodenameint4varchar(50)varchar(100)PKaccount_roleidcodenameint4varchar(50)varchar(50)PKuser_account:Notifications v2idaccount_idemailpasswordfull_nameint4int4varchar(100)varchar(200)varchar(100)PKN FKnotification_typeidcodenamedescriptionintvarchar(100)varchar(100)varchar(1000)PKnotificationiduser_account_idnotification_type_idcontentdatewas_viewedwas_readintint4intvarchar(1000)timestampboolboolPKFKFKaccount:Account v2idaccount_type_idnamecreation_datedeletion_dateint4intvarchar(100)timestamptimestampPKFKNuser_account_roleuser_account_idaccount_role_idaccount_idint4int4int4PK FKPK FKPK FKmodel_accessidmodel_idaccount_idint4int4int4PKFKFKaccount_typeidcodenameintvarchar(20)varchar(20)PKuser_account:Account v2idaccount_idemailpasswordfull_nameint4int4varchar(100)varchar(200)varchar(100)PKN FKuser_account:Sharing models v2idaccount_idemailpasswordfull_nameint4int4varchar(100)varchar(200)varchar(100)PKN FKaccount:Sharing models v2idaccount_type_idnamecreation_datedeletion_dateint4intvarchar(100)timestamptimestampPKFKN


Before, there were separate notifications for events in your personal account and in your team accounts. Each notification could be associated with either a user_account or company_account_member.


{"leftTopX": 1500, "leftTopY": 1070, "rightBottomX": 3339, "rightBottomY": 3748}Accounts v1Personal account v1Sharing models v1Accounts v1Company accountNotifications v1account_planidcodenameint4varchar(50)varchar(100)PKbilling_infouser_account_idcompany_namefirst_namelast_nameemail_addressaddresscredit_card_last_digitscredit_card_expires_yearcredit_card_expires_monthint4varchar(1000)varchar(255)varchar(255)varchar(255)varchar(1000)varchar(4)int4int4PK FKcurrent_account_planuser_account_idaccount_plan_idactivation_datevalid_toint4int4timestamptimestampPK FKFKNmodelidgidcreator_idcompany_account_idnamedescriptioncreation_datemodification_datedeletion_dateint4varchar(64)int4intvarchar(100)texttimestamptimestamptimestampPKN FKN FKNNmodel_shareidmodel_iduser_account_idcompany_account_member_idshare_type_idsinceint4int4int4intint4timestampPKFKN FKN FKFKshare_typeidcodenameint4varchar(50)varchar(100)PKuser_account:Sharing models v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PKuser_account:Accounts v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PKcompany_account:Accounts v1idcompany_namecreation_datedeletion_dateintvarchar(100)timestamptimestampPKNcompany_account_member_rolecompany_account_member_idcompany_user_role_idintintPK FKPK FKcompany_user_roleidcodenameintvarchar(50)varchar(50)PKcompany_account_member:Accounts v1idcompany_account_iduser_account_idsinceintintinttimestampPKFKFKcompany_billing_infocompany_account_idcompany_namefirst_namelast_nameemail_addressaddresscredit_card_last_digitscredit_card_expires_yearcredit_card_expires_monthintvarchar(1000)varchar(255)varchar(255)varchar(255)varchar(1000)varchar(4)intintPK FKcompany_account_planidcodenameintvarchar(50)varchar(100)PKcurrent_company_account_plancompany_account_idcompany_account_plan_idactivation_datevalid_tointint4timestamptimestampPK FKFKNcompany_account:Sharing models vidcompany_namecreation_datedeletion_dateintvarchar(100)timestamptimestampPKNuser_account:Notifications v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PKnotification_typeidcodenamedescriptionintvarchar(100)varchar(100)varchar(1000)PKnotificationiduser_account_idcompany_account_member_idnotification_type_idcontentdatewas_viewedwas_readintint4intintvarchar(1000)timestampboolboolPKN FKN FKFKcompany_account_member:Sharing models idcompany_account_iduser_account_idsinceintintinttimestampPKFKFKcompany_account_member:Notifications idcompany_account_iduser_account_idsinceintintinttimestampPKFKFKuser_account:Accounts v1idemailpasswordfull_nameint4varchar(100)varchar(200)varchar(100)PK


Similar changes had to be made in all places referencing user account or company account membership.

go to top

Our website uses cookies. By using this website, you agree to their use in accordance with the browser settings. You can modify your browser settings on your own. For more information see our Privacy Policy.