CREATE TABLE IF NOT EXISTS admin_users ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(80) NOT NULL, password_hash VARCHAR(255) NOT NULL, is_active TINYINT(1) NOT NULL DEFAULT 1, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uq_admin_username (username) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS authors ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, address VARCHAR(255) NOT NULL DEFAULT '', postal_code VARCHAR(20) NOT NULL DEFAULT '', city VARCHAR(120) NOT NULL DEFAULT '', bank_account VARCHAR(255) NOT NULL DEFAULT '', bic VARCHAR(20) NOT NULL DEFAULT '', bank_name VARCHAR(255) NOT NULL DEFAULT '', paypal_address VARCHAR(255) NOT NULL DEFAULT '', created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_authors_name (name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS books ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, title VARCHAR(255) NOT NULL, printing_costs DECIMAL(10,2) NOT NULL DEFAULT 0.00, selling_price DECIMAL(10,2) NOT NULL DEFAULT 0.00, ebook_price DECIMAL(10,2) NOT NULL DEFAULT 0.00, amazon_gross DECIMAL(10,2) NOT NULL DEFAULT 0.00, isbn_print VARCHAR(20) NULL, isbn_ebook VARCHAR(20) NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_books_title (title), UNIQUE KEY uq_books_isbn_print (isbn_print), UNIQUE KEY uq_books_isbn_ebook (isbn_ebook) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS book_authors ( book_id INT UNSIGNED NOT NULL, author_id INT UNSIGNED NOT NULL, margin_percent DECIMAL(5,2) NOT NULL, PRIMARY KEY (book_id, author_id), CONSTRAINT fk_book_authors_book FOREIGN KEY (book_id) REFERENCES books (id) ON DELETE CASCADE, CONSTRAINT fk_book_authors_author FOREIGN KEY (author_id) REFERENCES authors (id) ON DELETE RESTRICT, CONSTRAINT chk_book_authors_margin CHECK (margin_percent >= 0 AND margin_percent <= 100) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS book_sales ( book_id INT UNSIGNED NOT NULL, wholesale_quantity INT UNSIGNED NOT NULL DEFAULT 0, bookseller_quantity INT UNSIGNED NOT NULL DEFAULT 0, direct_quantity INT UNSIGNED NOT NULL DEFAULT 0, amazon_quantity INT UNSIGNED NOT NULL DEFAULT 0, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (book_id), CONSTRAINT fk_book_sales_book FOREIGN KEY (book_id) REFERENCES books (id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS ebook_sales ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, book_id INT UNSIGNED NOT NULL, sale_date DATE NOT NULL, sales_channel VARCHAR(255) NOT NULL, revenue DECIMAL(12,2) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uq_ebook_sales_book_date_channel (book_id, sale_date, sales_channel), KEY idx_ebook_sales_date (sale_date), CONSTRAINT fk_ebook_sales_book FOREIGN KEY (book_id) REFERENCES books (id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;