Возможно, вы могли бы использовать проплисты.
Предположим, вы сохранили профиль пользователя.
User = [{name,"John"},{surname,"Dow"}].
store_profile(User).
Затем, через пару лет, вы решили расширить профиль пользователя с возрастом пользователя.
User = [{name,"John"},{surname,"Dow"},{age,23}].
store_profile(User).
Теперь вам нужно получить профиль пользователя из БД
get_val(Key,Profile) ->
V = lists:keyfind(Key,1,Profile),
case V of
{_,Val} -> Val;
_ -> undefined
end.
User = get_profile().
UserName = get_val(name,User).
UserAge = get_val(age,User).
Если вы получите профиль пользователя версии 2, вы получите фактический возраст (23 в данном конкретном случае).
Если вы получите профиль пользователя «версия 1» («старый»), вы получите «неопределенный» как возраст, а затем вы можете обновить профиль и сохранить его с новым значением, так что он будет быть сущностью «новой версии».
Таким образом, нет конфликта версий.
Возможно, это не лучший способ, но в некоторых случаях это может быть решением.