Rhomobile provide a mini ORM called Rhom. It is similer to Active Record of Rails but with less features.It provides a high level way to make the local database easier to program. That database is SQLite on all platforms except BlackBerry where it is HSQL.
We can choose to store data in two way Propery Bag or Fixed Schema
Property Bag
All the data is store in stores in single table. Property bag is a db table which contains object id/attribute/value triplets and therefore set of attributes for each object is arbitrary.
Advantage
- It is simple to use, no require for specifiyng attributes before use
- we don't need to migrate data if we add/remove attributes
Disadvantage
- Size is 3 times bigger than fixed schema
- Slow while sync
This is how model look for PropertyBag:
class Employee
include Rhom::PropertyBag
# Uncomment the following line to enable sync with Employee.
# enable :sync
#add model specifc code here
end
Fixed Scema
Fixed schema is a regular db table with fixed set of columns (attributes)
Advantage
- Smaller size, you can specify index for only required attributes
- Faster sync time then Property bag
Disadvantage
- You have to support all schema changes
This is how fixed schema model looks :
class Employee
include Rhom::FixedSchema
# Uncomment the following line to enable sync with Employee.
# enable :sync
set :schema_version, '1.1'
property :name, :string
property :age, :string
property :company, :string
property :address, :string
property :gender, :string
property :salary, :string
#add model specifc code here
end
Note : You have to reset database if you change the property
When you use Fixed Schema model application developer is responsible for sql schema. So when you add or delete some properties or just change app logic you may need to perform data migration or database reset.
So if you have to add a column in a table we have to add a property and then reset the Device.
To create a index in fixed schema we will write following line in model :
index :by_name_tag, [:name, :tag] #will create index for name and tag columns
To create a primary key in fixed schema we will write following line in model :
unique_index :by_phone, [:phone]
Choosing in between PropertyBag and FixedSchema depend on you requirement.