Сценарий
Допустим, пользователь является продавцом. Модель User имеет много log_entries, которые используются как ежедневный журнал для данных о продажах. Пользователь также имеет настройки, которые позволяют им выбирать, какие поля видны в форме log_entry. Итак, если они выбирают ананасы, бананы и виноград ... это поля, которые будут в форме. Если эти варианты изменятся, данные не будут потеряны ... просто не видны в форме. Теперь, скажем, пользователь только что выбрал аккаунт для продажи клюквы, но клюква не является избранным атрибутом в форме пользовательских настроек. Они должны иметь возможность создать эту «категорию». Теперь сезон ананасов закончился, поэтому они заходят туда и снимают коробку с ананасом и проверяют коробку с клубникой. Теперь, когда они идут, чтобы ввести данные в свой журнал, будет поле данных для клубники, но не ананасы. Данные ананаса не исчезли ... его просто не показывают.Динамические столбцы таблицы, основанные на пользовательских предпочтениях
Этот сценарий создает пару проблем. Один из них заключается в том, что разработчиком я не знаю имена столбцов базы данных раньше времени, потому что пользователи могут создавать новые «категории» «на лету» (я мог бы потребовать, чтобы пользователи обращались ко мне, чтобы добавить больше по мере необходимости, но ...). И когда пользователь создает новую категорию ... в таблице log_entries не будет столбца для представления этих новых данных.
Как я могу управлять динамическими столбцами db? Может ли postgres hstore справиться с этим?
Одна строка - это запись, принадлежащая пользователю, основанная на дате. Каждый столбец содержит данные, относящиеся к атрибуту (например, ... один столбец может быть названа «клубника», и это будет держать, сколько единиц было продано в тот же день)
hstore похоже на путь. Но, если один пользователь создает категорию, я бы хотел, чтобы эта категория была доступна для всех пользователей. hstore кажется, что он будет специфичным для пользователя и, может быть, не очень организован. – hellion
. Лучший вариант, который я могу придумать, - создать столбец для каждого типа данных, который я могу думать о том, что пользователю может потребоваться зарегистрировать ... и затем отправить их попросите меня добавить дополнительные столбцы данных, если это необходимо. – hellion
Еще один вариант, который я хочу сделать, это создать определенное количество пользовательских столбцов в базе данных, скажем ... custom_one, custom_two и т. Д. (Возможно, 10 из них). Затем создайте модель Usercustom с двумя полями ... custom_col_ref: string и custom_col_label: string. custom_col_ref будет хранить фактическое имя столбца, где хранятся данные, а custom_col_label будет хранить метку, которая будет использоваться в форме. Затем используйте оператор if, чтобы показать/скрыть это поле в форме ... ", если Usercustom.find_by_custom_col_ref (" custom_one ") существует?" ... показать поле для этого столбца в форме. – hellion