diff --git a/persistable-record.cabal b/persistable-record.cabal
--- a/persistable-record.cabal
+++ b/persistable-record.cabal
@@ -1,5 +1,5 @@
 name:                persistable-record
-version:             0.2.0.0
+version:             0.3.0.0
 synopsis:            Binding between SQL database values and haskell records.
 description:         This package contiains types to represent table constraints and
                      interfaces to bind between SQL database values and Haskell records.
diff --git a/src/Database/Record/TH.hs b/src/Database/Record/TH.hs
--- a/src/Database/Record/TH.hs
+++ b/src/Database/Record/TH.hs
@@ -16,7 +16,7 @@
 module Database.Record.TH (
   -- * Generate all templates about record
   defineRecord,
-  defineRecordDefault,
+  defineRecordWithConfig,
 
   -- * Deriving class symbols
   derivingEq, derivingShow, derivingRead, derivingData, derivingTypeable,
@@ -24,16 +24,16 @@
   -- * Table constraint specified by key
   defineHasColumnConstraintInstance,
   defineHasPrimaryConstraintInstanceDerived,
-  defineHasNotNullKeyInstance,
   defineHasPrimaryKeyInstance,
-  defineHasPrimaryKeyInstanceDefault,
-  defineHasNotNullKeyInstanceDefault,
+  defineHasNotNullKeyInstance,
 
   -- * Record type
-  defineRecordType, defineRecordTypeDefault,
+  defineRecordType,
+  defineRecordTypeWithConfig,
 
   -- * Function declarations depending on SQL type
   makeRecordPersistableWithSqlType,
+  makeRecordPersistableWithSqlTypeWithConfig,
   makeRecordPersistableWithSqlTypeDefault,
 
   -- * Function declarations against defined record types
@@ -52,8 +52,10 @@
   reifyRecordType,
 
   -- * Templates about record type name
-  recordTypeNameDefault, recordTypeDefault,
+  NameConfig,  defaultNameConfig,
 
+  recordTypeName, recordType,
+
   columnOffsetsVarNameDefault,
 
   persistableFunctionNamesDefault,
@@ -93,16 +95,33 @@
 import qualified Database.Record.Persistable as Persistable
 
 
--- | Generate default name of record type constructor from SQL table name 'String'
-recordTypeNameDefault :: String  -- ^ Table name in SQL
-                      -> ConName -- ^ Result name
-recordTypeNameDefault =  conCamelcaseName
+-- | 'NameConfig' type to customize names of expanded record templates.
+data NameConfig =
+  NameConfig
+  { recordTypeName  ::  String -> String -> ConName
+    -- ^ Make record type symbol name from schema name and table name in SQL
+  , columnName      ::  String -> String -> VarName
+    -- ^ Make column variable symbol name from table name and column name in SQL
+  }
 
+-- | Dummy show instance. Handy to define show instance recursively.
+instance Show NameConfig where
+  show = const "<nameConfig>"
+
+-- | Default implementation of 'NameConfig' type
+defaultNameConfig :: NameConfig
+defaultNameConfig =
+  NameConfig
+  { recordTypeName  =  const conCamelcaseName
+  , columnName      =  const varCamelcaseName
+  }
+
 -- | Record type constructor template from SQL table name 'String'.
---   Type name is generated by 'recordTypeNameDefault'.
-recordTypeDefault :: String -- ^ Table name in SQL
-                  -> TypeQ  -- ^ Result type template
-recordTypeDefault =  toTypeCon . recordTypeNameDefault
+recordType :: NameConfig -- ^ name rule config
+           -> String     -- ^ Schema name string in SQL
+           -> String     -- ^ Table name string in SQL
+           -> TypeQ      -- ^ Record type constructor
+recordType config scm = toTypeCon . recordTypeName config scm
 
 -- | Variable expression of record column offset array.
 columnOffsetsVarNameDefault :: Name    -- ^ Table type name
@@ -148,22 +167,6 @@
 defineHasNotNullKeyInstance =
   defineHasColumnConstraintInstance [t| NotNull |]
 
--- | Template of 'HasColumnConstraint' 'Primary' instance
---   from SQL table name 'String' and key index.
-defineHasPrimaryKeyInstanceDefault :: String  -- ^ Table name
-                                   -> [Int]   -- ^ Key index which specifies this constraint
-                                   -> Q [Dec] -- ^ Declaration of primary key constraint instance
-defineHasPrimaryKeyInstanceDefault =
-  defineHasPrimaryKeyInstance . recordTypeDefault
-
--- | Template of 'HasColumnConstraint' 'NotNull' instance
---   from SQL table name 'String' and key index.
-defineHasNotNullKeyInstanceDefault :: String  -- ^ Table name
-                                   -> Int     -- ^ Key index which specifies this constraint
-                                   -> Q [Dec] -- ^ Declaration of not null key constraint instance
-defineHasNotNullKeyInstanceDefault =
-  defineHasNotNullKeyInstance . recordTypeDefault
-
 {-# DEPRECATED derivingEq "Use TH quasi-quotation like ''Eq instead of this." #-}
 -- | Name to specify deriving 'Eq'
 derivingEq   :: Name
@@ -228,13 +231,11 @@
 columnDefault :: String -> TypeQ -> (VarName, TypeQ)
 columnDefault n t = (varCamelcaseName n, t)
 
--- | Record type declaration template from SQL table name 'String'
---   and column name 'String' - type pairs, derivings.
-defineRecordTypeDefault :: String -> [(String, TypeQ)] -> [Name] -> Q [Dec]
-defineRecordTypeDefault table columns =
+defineRecordTypeWithConfig :: NameConfig -> String -> String -> [(String, TypeQ)] -> [Name] -> Q [Dec]
+defineRecordTypeWithConfig config schema table columns =
   defineRecordType
-  (recordTypeNameDefault table)
-  [ columnDefault n t | (n, t) <- columns ]
+  (recordTypeName config schema table)
+  [ (columnName config schema n, t) | (n, t) <- columns ]
 
 
 -- | Record parser template.
@@ -318,18 +319,29 @@
 toSqlNameDefault :: String -> VarName
 toSqlNameDefault =  (`varNameWithPrefix` "toSqlOf")
 
--- | All templates depending on SQL value type with default names.
-makeRecordPersistableWithSqlTypeDefault :: TypeQ   -- ^ SQL value type
-                                        -> String  -- ^ Table name of database
-                                        -> Int     -- ^ Count of record columns
-                                        -> Q [Dec] -- ^ Result declarations
-makeRecordPersistableWithSqlTypeDefault sqlValueType table width = do
+-- | All templates depending on SQL value type with configured names.
+makeRecordPersistableWithSqlTypeWithConfig :: TypeQ      -- ^ SQL value type
+                                         -> NameConfig -- ^ name rule config
+                                         -> String     -- ^ Schema name of database
+                                         -> String     -- ^ Table name of database
+                                         -> Int        -- ^ Count of record columns
+                                         -> Q [Dec]    -- ^ Result declarations
+makeRecordPersistableWithSqlTypeWithConfig sqlValueType config schema table width =
   makeRecordPersistableWithSqlType
     sqlValueType
     (persistableFunctionNamesDefault . conName . conCamelcaseName $ table)
-    (recordTypeDefault table, toDataCon . recordTypeNameDefault $ table)
+    (recordType config schema table, toDataCon . recordTypeName config schema $ table)
     width
 
+-- | All templates depending on SQL value type with default names.
+makeRecordPersistableWithSqlTypeDefault :: TypeQ   -- ^ SQL value type
+                                        -> String  -- ^ Schema name
+                                        -> String  -- ^ Table name
+                                        -> Int     -- ^ Count of record columns
+                                        -> Q [Dec] -- ^ Result declarations
+makeRecordPersistableWithSqlTypeDefault sqlValueType =
+  makeRecordPersistableWithSqlTypeWithConfig sqlValueType defaultNameConfig
+
 recordInfo' :: Info -> Maybe ((TypeQ, ExpQ), (Maybe [Name], [TypeQ]))
 recordInfo' =  d  where
   d (TyConI (DataD _cxt tcn _bs [r] _ds)) = case r of
@@ -385,15 +397,17 @@
   withSql <- makeRecordPersistableWithSqlType sqlValueType fnames (toTypeCon tyC, toDataCon tyC) $ length columns
   return $ typ ++ withSql
 
--- | All templates for record type with default names.
-defineRecordDefault :: TypeQ             -- ^ SQL value type
-                    -> String            -- ^ Table name
-                    -> [(String, TypeQ)] -- ^ Column names and types
-                    -> [Name]            -- ^ Record derivings
-                    -> Q [Dec]           -- ^ Result declarations
-defineRecordDefault sqlValueType table columns derives = do
-  typ     <- defineRecordTypeDefault table columns derives
-  withSql <- makeRecordPersistableWithSqlTypeDefault sqlValueType table $ length columns
+-- | All templates for record type with configured names.
+defineRecordWithConfig :: TypeQ             -- ^ SQL value type
+                     -> NameConfig        -- ^ name rule config
+                     -> String            -- ^ Schema name
+                     -> String            -- ^ Table name
+                     -> [(String, TypeQ)] -- ^ Column names and types
+                     -> [Name]            -- ^ Record derivings
+                     -> Q [Dec]           -- ^ Result declarations
+defineRecordWithConfig sqlValueType config schema table columns derives = do
+  typ     <- defineRecordTypeWithConfig config schema table columns derives
+  withSql <- makeRecordPersistableWithSqlTypeWithConfig sqlValueType config schema table $ length columns
   return $ typ ++ withSql
 
 
