diff --git a/Gemfile b/Gemfile
index 5266eef5f997e9fdbf54a467d4457804e1be2fa7..457e95cadcc4551596cfd865ebb70918b4f72098 100644
--- a/Gemfile
+++ b/Gemfile
@@ -23,6 +23,11 @@ gem 'active_model_serializers'
 #Because we're using a shitty database designed by a fuckin' drug addict
 gem 'composite_primary_keys'
 
+#Framework for background job processing : managing the database transformation between servers
+gem 'sidekiq'
+#Framework for distributed schedulinh
+gem 'sidetiq'
+
 # Use jquery as the JavaScript library
 #gem 'jquery-rails'
 
diff --git a/app/serializers/track_serializer.rb b/app/serializers/track_serializer.rb
index 30265c89b5f3a92fe6654b93b5642972831cbf1e..e3ef331c7ab29f3bc8854eff6691888e550b4556 100644
--- a/app/serializers/track_serializer.rb
+++ b/app/serializers/track_serializer.rb
@@ -1,6 +1,8 @@
 class TrackSerializer < ActiveModel::Serializer
   attributes :id, :title, :url, :type
 
+  #embed :ids, include: true
+
   has_one :channel
   has_many :tags
 
diff --git a/app/workers/database_migration.rb b/app/workers/database_migration.rb
new file mode 100644
index 0000000000000000000000000000000000000000..661eb80b3136d47a6ccfea21fb25f1d19d27eb61
--- /dev/null
+++ b/app/workers/database_migration.rb
@@ -0,0 +1,33 @@
+lass DatabaseMigration
+  include Sidekiq::Worker
+  include Sidetiq::Schedulable
+  recurrence { hourly }
+
+
+  def perform
+    local_dump_path = 'PlayBotAPI/playbot_database_dump.sql'
+
+    create_distant_dump
+    import_dump local_dump_path
+    revamp_database local_dump_path
+  end
+
+  def create_distant_dump
+    dump_file = '<distant_path_of_dump_file>'
+    dump_command = 'mysqldump  --single-transaction -h <mysql_info> -u <user_name> -p<password> <table_name>' 
+
+    system("ssh <server_with_playbot_database> '#{dump_command} > #{dump_file}'")
+  end
+
+  def import_dump( local_dump_path )
+    distant_dump_path = '<distant_path_of_dump_file>'
+
+    systen("scp <server_with_playbot_database>:#{distant_dump_path} #{local_dump_path}")
+  end
+
+  def revamp_database( local_dump_path )
+    ActiveRecord::Base.connection.execute(File.read(local_dump_path))
+    ActiveRecord::Base.connection.execute(File.read("lib/database_migration.sql"))
+  end
+  
+end
diff --git a/app/workers/database_update.rb b/app/workers/database_update.rb
new file mode 100644
index 0000000000000000000000000000000000000000..c32e3edcad79dc01595232cdd09908fddbf11b1b
--- /dev/null
+++ b/app/workers/database_update.rb
@@ -0,0 +1,9 @@
+lass DatabaseUpdate
+  include Sidekiq::Worker
+  include Sidetiq::Schedulable
+  recurrence { hourly }
+
+  def perform
+    #TODO : Optimize update in place of rewritting all database
+  end
+end
diff --git a/lib/database_migration.sql b/lib/database_migration.sql
new file mode 100644
index 0000000000000000000000000000000000000000..3665cd1886f729d49a4e0a59390887f4923ef515
--- /dev/null
+++ b/lib/database_migration.sql
@@ -0,0 +1,73 @@
+drop table if exists tracks, tags, tag_assignation, channels, users, irc_posts;
+
+create table tracks (
+	track_id INT NOT NULL UNIQUE, 
+	name VARCHAR(255), 
+	url VARCHAR(255), 
+	provider VARCHAR(255), 
+	PRIMARY KEY (track_id)
+);
+
+create table tags (
+	tag_id INT NOT NULL AUTO_INCREMENT, 
+	name VARCHAR(255) UNIQUE, 
+	quantity INT,
+	PRIMARY KEY (tag_id)
+);
+
+create table tag_assignation (
+	track_id INT, 
+	tag_id INT);
+
+create table channels (
+	channel_id INT NOT NULL AUTO_INCREMENT, 
+	name VARCHAR(255) UNIQUE, 
+	quantity INT,
+	PRIMARY KEY (channel_id)
+);
+
+create table users (
+	user_id INT NOT NULL AUTO_INCREMENT, 
+	name VARCHAR(255) UNIQUE, 
+	quantity INT,
+	PRIMARY KEY (user_id)
+);
+
+create table irc_posts (
+	track_id INT, 
+	channel_id INT, 
+	user_id INT,
+	date TIMESTAMP);
+
+insert into tracks (track_id, name, provider, url) 
+	SELECT id, title, type, url 
+		FROM playbot;
+
+insert into users (name) 
+	SELECT DISTINCT sender_irc 
+		FROM playbot_chan;
+
+insert into channels (name) 
+	SELECT DISTINCT chan 
+		FROM playbot_chan;
+
+insert into tags (name) 
+	SELECT DISTINCT tag 
+		FROM playbot_tags;
+
+insert into tag_assignation (track_id, tag_id)
+	SELECT id, tag_id
+		FROM playbot_tags
+                LEFT JOIN tags
+                  ON playbot_tags.tag = tags.name;
+
+alter table playbot_chan convert to character set utf8 collate utf8_general_ci;
+
+insert into irc_posts (track_id, channel_id, user_id, date) 
+	SELECT content, channel_id, user_id, date 
+		FROM playbot_chan
+                LEFT JOIN channels
+                  ON playbot_chan.chan = channels.name
+                LEFT JOIN users
+                  ON playbot_chan.sender_irc = users.name;
+