CREATE TABLE IF NOT EXISTS settings ( setting_key VARCHAR(255) NOT NULL, setting_value VARCHAR(255), PRIMARY KEY (setting_key) ); CREATE TABLE IF NOT EXISTS users ( user_id INT NOT NULL AUTO_INCREMENT, display_name VARCHAR(255), email VARCHAR(255) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, salt VARCHAR(255) NOT NULL, is_admin BOOLEAN, PRIMARY KEY (user_id) ); CREATE TABLE IF NOT EXISTS user_sessions ( session_id VARCHAR(255) NOT NULL, salt VARCHAR(255) NOT NULL, user_id INT NOT NULL, expiry DATETIME NOT NULL, PRIMARY KEY (session_id), FOREIGN KEY (user_id) REFERENCES users(user_id) ); CREATE TABLE IF NOT EXISTS locations ( location_id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, logo BLOB, PRIMARY KEY (location_id) ); CREATE TABLE IF NOT EXISTS permissions ( user_id INT NOT NULL, location_id INT NOT NULL, is_owner BOOLEAN, PRIMARY KEY (user_id, location_id), FOREIGN KEY (user_id) REFERENCES users(user_id), FOREIGN KEY (location_id) REFERENCES locations(location_id) ); CREATE TABLE IF NOT EXISTS visits ( visit_id INT NOT NULL AUTO_INCREMENT, location_id INT NOT NULL, arrival DATETIME NOT NULL, departure DATETIME NOT NULL, PRIMARY KEY (visit_id), FOREIGN KEY (location_id) REFERENCES locations(location_id) ); CREATE TABLE IF NOT EXISTS visitors ( visitor_id INT NOT NULL AUTO_INCREMENT, visit_id INT NOT NULL, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, address1 VARCHAR(255), address2 VARCHAR(255), zip VARCHAR(255), city VARCHAR(255), country VARCHAR(255), phone VARCHAR(255), email VARCHAR(255), PRIMARY KEY (visitor_id), FOREIGN KEY (visit_id) REFERENCES visits(visit_id) );