CREATE TABLE content_types ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(64) NOT NULL, slug VARCHAR(64) NOT NULL UNIQUE, description TEXT NULL, created_at TIMESTAMP NULL, updated_at TIMESTAMP NULL ) ENGINE=InnoDB; CREATE TABLE categories ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, content_type_id INT UNSIGNED NOT NULL, parent_id INT UNSIGNED NULL, name VARCHAR(128) NOT NULL, slug VARCHAR(128) NOT NULL, description TEXT NULL, image VARCHAR(255) NULL, is_active BOOLEAN DEFAULT TRUE, sort_order INT DEFAULT 0, created_at TIMESTAMP NULL, updated_at TIMESTAMP NULL, UNIQUE KEY uniq_category_slug (content_type_id, slug), FOREIGN KEY (content_type_id) REFERENCES content_types(id), FOREIGN KEY (parent_id) REFERENCES categories(id) ON DELETE CASCADE ) ENGINE=InnoDB; CREATE TABLE category_seo ( category_id INT UNSIGNED PRIMARY KEY, meta_title VARCHAR(255) NULL, meta_description VARCHAR(255) NULL, meta_keywords VARCHAR(255) NULL, canonical_url VARCHAR(255) NULL, FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE CASCADE ) ENGINE=InnoDB; CREATE TABLE category_translations ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, category_id INT UNSIGNED NOT NULL, locale CHAR(2) NOT NULL, name VARCHAR(128) NOT NULL, description TEXT NULL, UNIQUE KEY uniq_translation (category_id, locale), FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE CASCADE ) ENGINE=InnoDB; CREATE TABLE artwork_category ( artwork_id INT UNSIGNED NOT NULL, category_id INT UNSIGNED NOT NULL, PRIMARY KEY (artwork_id, category_id), FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE CASCADE ) ENGINE=InnoDB;