sdb_dal is an object to database mapping layer. It enables you to create persistable domain model objects stored in Amazon's SDB (Simple DB). A typical domain model class will look like this. class StorageItem < SdbDal::DomainObject data_attribute :id ,:string,:is_primary_key=>true,:unique=>true data_attribute :path,:string,:unique=>true data_attribute :uploaded_date,:date data_attribute :login,:string data_attribute :description,:string data_attribute :title,:string data_attribute :has_audio,:boolean data_attribute :has_video,:boolean data_attribute :has_image,:boolean data_attribute :metadata,:string,:is_collection=>true #unlike relation DB columns, sdb attributes can have multiple values has_many :StorageFile,:storage_item_id,:storage_files belongs_to :User,:login,:user many_to_many :Album, :AlbumItems, :storage_item_id,:album_id, :items index :login_and_has_audio ,[:login,:has_audio] index :login_and_has_video ,[:login,:has_video] index :login_and_has_image ,[:login,:has_image] end SDB does not have a schema the way relational databases do. SDB_DAL forces you to create a schema in your code. You this in your class using the data_attribute method. Relationships and indexes can also be created. The resulting class will expose many helper methods. Some examples... item=StorageItem.find(some_id) item.title='new title' item.save! user=item.user albums=item.albums storage_item=StorageItem.find_by_path('some path') storage_items=StorageItem.find_by_title('some title') storage_items=StorageItem.find_by_login_and_has_audio('david',true)