diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py
index 99fc72e..0143770 100644
--- a/django/conf/global_settings.py
+++ b/django/conf/global_settings.py
@@ -130,6 +130,7 @@ DATABASE_PASSWORD = ''         # Not used with sqlite3.
 DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.
 DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.
 DATABASE_OPTIONS = {}          # Set to empty dictionary for default.
+DATABASE_SCHEMA = ''           # Set to empty string for default.
 
 # Host for sending e-mail.
 EMAIL_HOST = 'localhost'
diff --git a/django/conf/project_template/settings.py b/django/conf/project_template/settings.py
index bbf005d..bb4564e 100644
--- a/django/conf/project_template/settings.py
+++ b/django/conf/project_template/settings.py
@@ -15,6 +15,7 @@ DATABASE_USER = ''             # Not used with sqlite3.
 DATABASE_PASSWORD = ''         # Not used with sqlite3.
 DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.
 DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.
+DATABASE_SCHEMA = ''           # Set to empty string for default.
 
 # Local time zone for this installation. Choices can be found here:
 # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
diff --git a/django/db/backends/__init__.py b/django/db/backends/__init__.py
index 0a9ec1e..48d21eb 100644
--- a/django/db/backends/__init__.py
+++ b/django/db/backends/__init__.py
@@ -290,9 +290,16 @@ class BaseDatabaseOperations(object):
     def prep_db_table(self, db_schema, db_table):
         """
         Prepares and formats the table name if necessary.
-        Just returns the db_table if not supported.
+        Just returns quoted db_table if not supported.
         """
-        return db_table
+        return self.quote_name(db_table)
+
+    def prep_db_index(self, db_schema, db_index):
+        """
+        Prepares and formats the table index name if necessary.
+        Just returns quoted db_index if not supported.
+        """
+        return self.quote_name(db_index)
 
     def random_function_sql(self):
         """
diff --git a/django/db/backends/creation.py b/django/db/backends/creation.py
index 828889c..a7ab6fd 100644
--- a/django/db/backends/creation.py
+++ b/django/db/backends/creation.py
@@ -274,7 +274,7 @@ class BaseDatabaseCreation(object):
             else:
                 tablespace_sql = ''
             index_name = '%s_%s' % (model._meta.db_table, f.column)
-            index_name = self.connection.ops.prep_db_table(model._meta.db_schema, index_name)
+            index_name = self.connection.ops.prep_db_index(model._meta.db_schema, index_name)
             output = [style.SQL_KEYWORD('CREATE INDEX') + ' ' +
                 style.SQL_TABLE(index_name) + ' ' +
                 style.SQL_KEYWORD('ON') + ' ' +
diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py
index abea3b7..0d47dc0 100644
--- a/django/db/backends/mysql/base.py
+++ b/django/db/backends/mysql/base.py
@@ -167,6 +167,9 @@ class DatabaseOperations(BaseDatabaseOperations):
         else:
             return qn(db_table)
 
+    def prep_db_index(self, db_schema, db_index):
+        return self.prep_db_table(db_schema, db_index)
+
     def random_function_sql(self):
         return 'RAND()'
 
diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py
index f1240d7..7488376 100644
--- a/django/db/backends/oracle/base.py
+++ b/django/db/backends/oracle/base.py
@@ -135,6 +135,9 @@ WHEN (new.%(col_name)s IS NULL)
         else:
             return qn(db_table)
 
+    def prep_db_index(self, db_schema, db_index):
+        return self.prep_db_table(db_schema, db_index)
+
     def prep_for_iexact_query(self, x):
         return x
 
diff --git a/django/db/models/options.py b/django/db/models/options.py
index a6fd925..7985e5f 100644
--- a/django/db/models/options.py
+++ b/django/db/models/options.py
@@ -30,7 +30,7 @@ class Options(object):
         self.module_name, self.verbose_name = None, None
         self.verbose_name_plural = None
         self.db_table = ''
-        self.db_schema = ''
+        self.db_schema = settings.DATABASE_SCHEMA
         self.qualified_name = ''
         self.ordering = []
         self.unique_together =  []
diff --git a/docs/ref/models/options.txt b/docs/ref/models/options.txt
index 30b6fb6..682a229 100644
--- a/docs/ref/models/options.txt
+++ b/docs/ref/models/options.txt
@@ -50,17 +50,21 @@ If your database table name is an SQL reserved word, or contains characters that
 aren't allowed in Python variable names -- notably, the hyphen -- that's OK.
 Django quotes column and table names behind the scenes.
 
+.. _db_schema:
+
 ``db_schema``
 -----------------
 
+.. attribute:: Options.db_schema
+
 **New in Django development version**
 
 The name of the database schema to use for the model. If the backend
 doesn't support multiple schemas, this options is ignored.
 
-If this is used Django will prefix any table names with the schema name.
-For example MySQL Django would use ``db_schema + '.' + db_table``.
-Be aware that postgres supports different schemas within the database. 
+If this is used the Django will prefix the model table names with the schema
+name. For example MySQL Django would use ``db_schema + '.' + db_table``.
+Be aware that PostgreSQL supports different schemas within the database. 
 MySQL solves the same thing by treating it as just another database.
 
 
diff --git a/docs/ref/settings.txt b/docs/ref/settings.txt
index e8c673d..4c16bf7 100644
--- a/docs/ref/settings.txt
+++ b/docs/ref/settings.txt
@@ -227,6 +227,22 @@ Default: ``''`` (Empty string)
 The port to use when connecting to the database. An empty string means the
 default port. Not used with SQLite.
 
+.. setting:: DATABASE_SCHEMA
+
+DATABASE_SCHEMA
+---------------
+
+**New in Django development version**
+
+Default: ``''`` (Empty string)
+
+The name of the database schema to use for models. If the backend
+doesn't support multiple schemas, this options is ignored. An empty
+string means the default schema.
+
+If this is used the Django will prefix any table names with the schema name.
+The schema can be overriden in model, for details see :ref:`db_schema`.
+
 .. setting:: DATABASE_USER
 
 DATABASE_USER
