2013-04-22 1 views
1

Чтобы свести к минимуму количество объединений, которые я должен выполнить в своем приложении, я решил скопировать в свою базу данных одно и то же поле в нескольких таблицах, например: I имеют Пользователь, Продукт и таблицу с листами.Как обновить одни и те же атрибуты в нескольких таблицах с помощью Postgresql и Rails

На страницах моего продукта отображается пользователь, создавший продукт, в качестве страниц списка пожеланий, в котором также отображается пользователь, который их создал.

Итак, я добавил в таблицу продуктов и списков желаний все поля пользователей, необходимые для отображения необходимой информации.

Как обновить поля, связанные с пользователями, в таблице продуктов и списков желаний, как только пользователь изменит свою информацию?

Вот часть моей модели:

Таблица Пользователь

  • Полное имя
  • Аватар UserName URL

Таблица продукта

  • Наименование
  • Цена Продукт
  • ID пользователя
  • Полное имя пользователя
  • Имя пользователя
  • Пользователь Аватар URL

лист пожеланий Таблица

  • лист пожеланий Имя
  • User ID
  • Полное имя пользователя
  • Имя пользователя
  • Пользователь Аватар URL

Заранее спасибо за ваши ответы!

+0

Вы бы разместили свой файл schema.rb так же, как 3 модели? –

ответ

2

Во-первых, путем денормализации данных так, как вы, вы работаете против того, что должны делать реляционные базы данных. Они преуспевают в объединениях, и каждая часть данных появляется как можно меньше. Поэтому вы действительно хотите убедиться, что это схема, которую вы хотите.

Как сказано, вы можете использовать базовый синтаксис update_attibute для обновления любого поля в любой таблице. Итак, если пользователь отредактировал свое имя пользователя, вы бы сделали:

User.update_attribute(:username, username) 
Product.update_attribute(:username, username) 
Wishlist.update_attribute(:username, username) 
+0

Хорошо, но будет ли этот метод быстрее, чем использование объединений? или это же касается производительности? Благодаря, –