--- /dev/null
+"""Database management."""
+from os.path import isfile
+from sqlite3 import connect as sql_connect
+from plomtask.misc import HandledException
+
+PATH_DB_SCHEMA = 'scripts/init.sql'
+
+
+class DatabaseFile:
+    """Represents the sqlite3 database's file."""
+
+    def __init__(self, path):
+        self.path = path
+        self.check()
+
+    def check(self):
+        """Check file exists and is of proper schema."""
+        self.exists = isfile(self.path)
+        if self.exists:
+            self.validate_schema()
+
+    def remake(self):
+        """Create tables in self.path file as per PATH_DB_SCHEMA sql file."""
+        with sql_connect(self.path) as conn:
+            with open(PATH_DB_SCHEMA, 'r', encoding='utf-8') as f:
+                conn.executescript(f.read())
+        self.check()
+
+    def validate_schema(self):
+        """Compare found schema with what's stored at PATH_DB_SCHEMA."""
+        sql_for_schema = 'SELECT sql FROM sqlite_master ORDER BY sql'
+        msg_wrong_schema = 'Database has wrong tables schema.'
+        with sql_connect(self.path) as conn:
+            schema_rows = [r[0] for r in conn.execute(sql_for_schema) if r[0]]
+            retrieved_schema = ';\n'.join(schema_rows) + ';'
+            with open(PATH_DB_SCHEMA, 'r', encoding='utf-8') as f:
+                stored_schema = f.read().rstrip()
+                if stored_schema != retrieved_schema:
+                    raise HandledException(msg_wrong_schema)
 
 #!/usr/bin/env python3
 """Call this to start the application."""
 from sys import exit as sys_exit
+from os import environ
 from plomtask.misc import HandledException
 from plomtask.http import TaskHandler, TaskServer
+from plomtask.db import DatabaseFile
 
+PATH_DB = environ.get('PATH_DB')
 HTTP_PORT = 8082
 TEMPLATES_DIR = 'templates'
+DB_CREATION_ASK = 'Database file not found. Create? Y/n\n'
 
 
 if __name__ == '__main__':
     try:
+        if not PATH_DB:
+            raise HandledException('PATH_DB not set.')
+        db_file = DatabaseFile(PATH_DB)
+        if not db_file.exists:
+            legal_yesses = {'y', 'yes', 'yes.', 'yes!'}
+            reply = input(DB_CREATION_ASK)
+            if reply.lower() in legal_yesses:
+                db_file.remake()
+            else:
+                print('Not recognizing reply as "yes".')
+                raise HandledException('Cannot run without database.')
         server = TaskServer(TEMPLATES_DIR,
                             ('localhost', HTTP_PORT), TaskHandler)
         print(f'running at port {HTTP_PORT}')
             print('aborting due to keyboard interrupt')
         server.server_close()
     except HandledException as e:
-        print(f'Aborting due to: {e}')
+        print(f'Aborting because: {e}')
         sys_exit(1)