Плюсы / минусы хранения сериализованного хэша и объекта базы данных ключ / значение в 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
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. Ключ / Значение Storeclass 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.