Плюсы / минусы хранения сериализованного хэша и объекта базы данных ключ / значение в ActiveRecord?

Если у меня есть несколько объектов, каждый из которых имеет в основномProfile, что я использую для хранения случайных атрибутов, каковы плюсы и минусы:

Хранение сериализованного хэша в столбце для записи, по сравнению сХранение группы объектов ключ / значение, которыеbelong_to основной объект.Код

Скажем, у вас есть записи об ИППП, подобные этим:

class Building < ActiveRecord::Base
  has_one :profile, :as => :profilable
end
class OfficeBuilding < Building; end
class Home < Building; end
class Restaurant < Building; end

каждыйhas_one :profile

Вариант 1. Сериализованный хэш
class SerializedProfile < ActiveRecord::Base
  serialize :settings
end

create_table :profiles, :force => true do |t|
  t.string   :name
  t.string   :website
  t.string   :email
  t.string   :phone
  t.string   :type
  t.text     :settings
  t.integer  :profilable_id
  t.string   :profilable_type
  t.timestamp
end
Вариант 2. Ключ / Значение Store
class KeyValueProfile < ActiveRecord::Base
  has_many :settings
end

create_table :profiles, :force => true do |t|
  t.string   :name
  t.string   :website
  t.string   :email
  t.string   :phone
  t.string   :type
  t.integer  :profilable_id
  t.string   :profilable_type
  t.timestamp
end

create_table :settings, :force => true do |t|
  t.string   :key
  t.text     :value
  t.integer  :profile_id
  t.string   :profile_type
  t.timestamp
end

Что бы вы выбрали?

Предположим, что 99% времени мне не нужно искать по обычаюsettings, Просто интересно, каковы компромиссы с точки зрения производительности и вероятности будущих проблем. И количество пользовательскихsettings вероятно будет где-то с 10-50.

Я предпочел бы пойти со вторым вариантом, с таблицей настроек, потому что она следует объектно-ориентированным соглашениям ActiveRecord. Но мне интересно, если бы в такой ситуации это было бы слишком дорого.

Примечание: мне интересно только с точки зрения RDBMS. Это было бы идеально подходит для MongoDB / Redis / CouchDB / и т. Д. но я хочу знать только плюсы и минусы с точки зрения SQL.

Ответы на вопрос(3)

Ваш ответ на вопрос