CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, public_key TEXT NOT NULL, creation_time DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS security_types ( name TEXT PRIMARY KEY ) STRICT; INSERT INTO security_types(name) VALUES ('currency'), ('bond'); CREATE TABLE IF NOT EXISTS securities ( id INTEGER PRIMARY KEY AUTOINCREMENT, security_type TEXT NOT NULL, name TEXT NOT NULL UNIQUE, symbol TEXT NOT NULL UNIQUE, creation_time DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (security_type) REFERENCES security_types (name) ); CREATE TABLE IF NOT EXISTS security_permissions ( id INTEGER PRIMARY KEY AUTOINCREMENT, security_id INTEGER NOT NULL, user_id INTEGER NOT NULL, creation_time DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (security_id) REFERENCES securities (id), FOREIGN KEY (user_id) REFERENCES users (id) ); CREATE TABLE IF NOT EXISTS accounts ( id INTEGER PRIMARY KEY AUTOINCREMENT, security INTEGER NOT NULL, owner INTEGER NOT NULL, amount INTEGER NOT NULL, timestamp DATETIME NOT NULL, creation_time DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (security) REFERENCES securities (id), FOREIGN KEY (owner) REFERENCES users (id) ); CREATE TABLE IF NOT EXISTS cashed_cheques ( id INTEGER PRIMARY KEY AUTOINCREMENT, drawer_user_id INTEGER NOT NULL, drawer_account_id INTEGER, cheque_number INTEGER NOT NULL, amount INTEGER NOT NULL, underlying_security INTEGER NOT NULL, creation_time DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (underlying_security) REFERENCES securities (id), FOREIGN KEY (drawer_user_id) REFERENCES users (id), FOREIGN KEY (drawer_account_id) REFERENCES accounts (id) );